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

Đảm bảo tính duy nhất của hàng trong MySQL với UNIQUE CONSTRAINT

Ràng buộc UNIQUE (trên 1 hoặc nhiều cột) đảm bảo không có 2 hàng có cùng giá trị trên bộ cột đó. Khác với PRIMARY KEY: cho phép NULL (trừ MySQL 5.7+ với InnoDB), và một bảng có thể có nhiều UNIQUE constraint.

Ví dụ minh họa

Tạo bảng:

CREATE TABLE DemoTable1580 (id INT, Name VARCHAR(20), Age INT);

Thêm UNIQUE constraint trên 3 cột (composite unique):

ALTER TABLE DemoTable1580 ADD UNIQUE INDEX (id, Name, Age);

Chèn dữ liệu:

INSERT INTO DemoTable1580 VALUES (101, 'Chris', 21);  -- OK
INSERT INTO DemoTable1580 VALUES (102, 'Chris', 21);  -- OK (id khác)
INSERT INTO DemoTable1580 VALUES (102, 'David', 21);  -- OK (Name khác)
INSERT INTO DemoTable1580 VALUES (101, 'Chris', 21);  -- LỖI: trùng (101, Chris, 21)

Kết quả

ERROR 1062 (23000): Duplicate entry '101-Chris-21' for key 'id'
idNameAge
101Chris21
102Chris21
102David21

Các cách tạo UNIQUE

-- Khi CREATE TABLE
CREATE TABLE t (a INT, b INT, UNIQUE(a,b));

-- ALTER TABLE
ALTER TABLE t ADD UNIQUE (a,b);
ALTER TABLE t ADD CONSTRAINT uk_a_b UNIQUE (a,b);  -- Đặt tên constraint

-- PRIMARY KEY cũng là UNIQUE + NOT NULL
CREATE TABLE t (a INT PRIMARY KEY, b INT);

Lưu ý về NULL

  • MySQL cho phép nhiều NULL trong cột UNIQUE (vì NULL ≠ NULL).
  • Nếu cần UNIQUE không cho NULL: ALTER TABLE t MODIFY a INT NOT NULL; ADD UNIQUE(a);

Xử lý trùng lặp khi INSERT

  • INSERT IGNORE: Bỏ qua hàng trùng, không báo lỗi.
  • INSERT ... ON DUPLICATE KEY UPDATE: Cập nhật nếu trùng (xem bài 1003075171).
  • REPLACE INTO: Xóa hàng cũ, chèn hàng mới (cẩn thận: trigger DELETE + INSERT).