Mặc định MySQL cho phép chèn trùng lặp (chỉ warning) nếu không có ràng buộc UNIQUE/PRIMARY KEY. Thêm UNIQUE INDEX để buộc báo lỗi khi trùng.
Tạo bảng và thêm UNIQUE INDEX
mysql> CREATE TABLE DemoTable(FirstName VARCHAR(100)); Query OK, 0 rows affected (0.58 sec) mysql> ALTER TABLE DemoTable ADD UNIQUE INDEX(FirstName); Query OK, 0 rows affected (0.50 sec)
Chèn dữ liệu - lỗi khi trùng
mysql> INSERT INTO DemoTable VALUES('Chris');
Query OK, 1 row affected (0.32 sec)
mysql> INSERT INTO DemoTable VALUES('Robert');
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO DemoTable VALUES('David');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES('Robert');
ERROR 1062 (23000): Duplicate entry 'Robert' for key 'FirstName'
mysql> INSERT INTO DemoTable VALUES('Chris');
ERROR 1062 (23000): Duplicate entry 'Chris' for key 'FirstName'
mysql> INSERT INTO DemoTable VALUES('Sam');
Query OK, 1 row affected (0.12 sec)
Kết quả (4 hàng duy nhất):
+-----------+ | FirstName | +-----------+ | Chris | | David | | Robert | | Sam | +-----------+
Tóm tắt hành vi:
| Cú pháp | Có UNIQUE KEY | Không UNIQUE KEY |
|---|---|---|
| INSERT | Lỗi 1062 nếu trùng | Chèn thành công (cho phép trùng) |
| INSERT IGNORE | Bỏ qua, không lỗi, không chèn | Chèn thành công |
| INSERT ... ON DUPLICATE KEY UPDATE | Cập nhật nếu trùng | Chèn mới |