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

Cách tránh chèn bản ghi trùng lặp trong MySQL

Để ngăn chặn việc chèn dữ liệu trùng lặp trong MySQL, bạn có thể sử dụng ràng buộc UNIQUE trên một hoặc nhiều cột.

Cú pháp thêm ràng buộc UNIQUE

ALTER TABLE tên_bảng ADD UNIQUE(tên_cột1, tên_cột2, ...);

Ví dụ minh họa

Tạo bảng demo:

mysql> CREATE TABLE avoidInsertingDuplicateRows (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> FirstValue INT,
    -> SecondValue INT
    -> );
Query OK, 0 rows affected (0.53 sec)

Kiểm tra cấu trúc bảng:

mysql> DESC avoidInsertingDuplicateRows;
+-------------+---------+------+-----+---------+----------------+
| Field       | Type    | Null | Key | Default | Extra          |
+-------------+---------+------+-----+---------+----------------+
| Id          | int(11) | NO   | PRI | NULL    | auto_increment |
| FirstValue  | int(11) | YES  |     | NULL    |                |
| SecondValue | int(11) | YES  |     | NULL    |                |
+-------------+---------+------+-----+---------+----------------+

Thêm ràng buộc UNIQUE cho cặp cột (FirstValue, SecondValue):

mysql> ALTER TABLE avoidInsertingDuplicateRows ADD UNIQUE(FirstValue, SecondValue);

Thử chèn dữ liệu:

mysql> INSERT INTO avoidInsertingDuplicateRows(FirstValue, SecondValue) VALUES(10, 20);
Query OK, 1 row affected (0.24 sec)

mysql> INSERT INTO avoidInsertingDuplicateRows(FirstValue, SecondValue) VALUES(10, 20);
ERROR 1062 (23000): Duplicate entry '10-20' for key 'FirstValue'

Kiểm tra dữ liệu trong bảng:

mysql> SELECT * FROM avoidInsertingDuplicateRows;
+----+------------+-------------+
| Id | FirstValue | SecondValue |
+----+------------+-------------+
| 1  | 10         | 20          |
+----+------------+-------------+

Giải thích: Ràng buộc UNIQUE trên nhiều cột (composite unique) đảm bảo rằng sự kết hợp của các giá trị trong các cột đó là duy nhất. Bạn cũng có thể định nghĩa UNIQUE ngay khi tạo bảng:

CREATE TABLE tên_bảng (
    cột1 kiểu_dữ_liệu,
    cột2 kiểu_dữ_liệu,
    UNIQUE(tên_ràng_buộc)(cột1, cột2)
);