Giới thiệu
Sử dụng ràng buộc UNIQUE KEY để ngăn chặn dữ liệu trùng lặp, MySQL sẽ báo lỗi ERROR 1062 (23000): Duplicate entry khi vi phạm.
1. Tạo bảng
mysql> create table DemoTable1553 (
-> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName varchar(20),
-> EmployeeSalary int
-> );
Query OK, 0 rows affected (0.47 sec)
2. Thêm UNIQUE KEY cho cột Salary
mysql> alter table DemoTable1553 add unique(EmployeeSalary); Query OK, 0 rows affected (0.53 sec) Records: 0 Duplicates: 0 Warnings: 0
3. Chèn dữ liệu
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('Chris',45000);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('David',35000);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('Sam',25000);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('Carol',45000);
ERROR 1062 (23000): Duplicate entry '45000' for key 'EmployeeSalary'
4. Dữ liệu hiện có (Carol bị từ chối)
mysql> select * from DemoTable1553;
+------------+--------------+----------------+ | EmployeeId | EmployeeName | EmployeeSalary | +------------+--------------+----------------+ | 1 | Chris | 45000 | | 2 | David | 35000 | | 3 | Sam | 25000 | +------------+--------------+----------------+ 3 rows in set (0.00 sec)
Các cách xử lý trùng lặp khác:
INSERT IGNORE: Bỏ qua lỗi, không chèn hàng trùngINSERT ... ON DUPLICATE KEY UPDATE: Cập nhật hàng hiện có (xem bài 1003075108)REPLACE INTO: Xóa hàng cũ, chèn hàng mới (nếu trùng PK/UNIQUE)
Khuyên dùng UNIQUE KEY cho các cột nghiệp vụ: email, username, số CMND, mã sản phẩm...