ไม่สามารถใช้ WHERE ใน INSERT ได้โดยตรง ต้องใช้ UPDATE แทนสำหรับแก้ไขข้อมูลที่มีอยู่แล้ว
ไวยากรณ์ UPDATE
UPDATE yourTableName SET yourColumnName1 = yourValue1, yourColumnName2 = yourValue2, ... WHERE yourCondition;
สร้างตารางตัวอย่าง
mysql> create table addWhereClauseDemo (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(30),
-> StudentPassword varchar(40)
-> );
Query OK, 0 rows affected (0.45 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into addWhereClauseDemo(StudentName,StudentPassword) values('John','John123456');
mysql> insert into addWhereClauseDemo(StudentName,StudentPassword) values('Carol','99999');
mysql> insert into addWhereClauseDemo(StudentName,StudentPassword) values('Bob','OO7Bob');
mysql> insert into addWhereClauseDemo(StudentName,StudentPassword) values('David','David321');
แสดงข้อมูลก่อนอัปเดต
mysql> select * from addWhereClauseDemo;
ผลลัพธ์:
+-----------+-------------+-----------------+ | StudentId | StudentName | StudentPassword | +-----------+-------------+-----------------+ | 1 | John | John123456 | | 2 | Carol | 99999 | | 3 | Bob | OO7Bob | | 4 | David | David321 | +-----------+-------------+-----------------+
อัปเดตข้อมูลที่ StudentId = 4
mysql> UPDATE addWhereClauseDemo
-> SET StudentName = 'Maxwell', StudentPassword = 'Maxwell44444'
-> WHERE StudentId = 4;
Query OK, 1 row affected (0.18 sec)
ตรวจสอบหลังอัปเดต
mysql> select * from addWhereClauseDemo;
ผลลัพธ์:
+-----------+-------------+-----------------+ | StudentId | StudentName | StudentPassword | +-----------+-------------+-----------------+ | 1 | John | John123456 | | 2 | Carol | 99999 | | 3 | Bob | OO7Bob | | 4 | Maxwell | Maxwell44444 | +-----------+-------------+-----------------+
สรุป
INSERTใช้สำหรับเพิ่มแถวใหม่ ไม่มี WHEREUPDATEใช้สำหรับแก้ไขแถวที่มีอยู่ ต้องมี WHERE (มิฉะนั้นจะอัปเดตทุกแถว)- ถ้าต้องการ "เพิ่มถ้ายังไม่มี แก้ไขถ้ามีอยู่" ให้ใช้
INSERT ... ON DUPLICATE KEY UPDATE