Logo

08 INSERT, UPDATE, DELETE และ Transaction

INSERT, UPDATE, DELETE และ Transaction

นอกจากอ่านข้อมูล SQL ยังใช้เปลี่ยนแปลงข้อมูลได้ ต้องระวังเป็นพิเศษ เพราะกระทบข้อมูลจริง

INSERT

เพิ่มข้อมูลใหม่

INSERT INTO customers (customer_id, name, country)
VALUES (1, 'Ann', 'Thailand');

เพิ่มหลาย row

INSERT INTO customers (customer_id, name, country)
VALUES
  (2, 'Bob', 'Singapore'),
  (3, 'Cat', 'Japan');

UPDATE

แก้ไขข้อมูล

UPDATE customers
SET country = 'Thailand'
WHERE customer_id = 1;

ห้ามลืม WHERE ถ้าไม่ได้ตั้งใจแก้ทุก row

DELETE

ลบข้อมูล

DELETE FROM customers
WHERE customer_id = 3;

ห้ามลืม WHERE ถ้าไม่ได้ตั้งใจลบทุก row

ตรวจสอบก่อนแก้

ก่อน UPDATE หรือ DELETE ควรใช้ SELECT ตรวจสอบ row ที่จะกระทบก่อน

SELECT *
FROM customers
WHERE customer_id = 1;

Transaction

Transaction ช่วยรวมหลายคำสั่งเป็นชุด ถ้ามีปัญหาสามารถ rollback ได้

BEGIN;

UPDATE accounts
SET balance = balance - 100
WHERE account_id = 1;

UPDATE accounts
SET balance = balance + 100
WHERE account_id = 2;

COMMIT;

ถ้าพบปัญหา:

ROLLBACK;

Soft Delete

งานจริงบางระบบไม่ลบข้อมูลจริง แต่ใช้ flag

UPDATE customers
SET deleted_at = CURRENT_TIMESTAMP
WHERE customer_id = 1;

แบบฝึกหัด

  1. เพิ่ม customer ใหม่ 3 คน
  2. แก้ประเทศของ customer 1 คน
  3. ลบ customer 1 คนโดยมี WHERE
  4. เขียน SELECT ตรวจสอบก่อน UPDATE
  5. อธิบายว่าเมื่อไรควรใช้ transaction