Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Hiển thị lỗi khi chèn bản ghi trùng lặp với UNIQUE KEY trong MySQL

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ùng
  • INSERT ... 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...