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

Cách xóa ràng buộc duy nhất (UNIQUE) khỏi bảng MySQL?

Xóa UNIQUE CONSTRAINT/INDEX trong MySQL

Sử dụng ALTER TABLE ... DROP INDEX để xóa ràng buộc duy nhất (unique constraint) vì trong MySQL, UNIQUE constraint được triển khai dưới dạng UNIQUE INDEX.

Cú pháp

ALTER TABLE yourTableName DROP INDEX yourUniqueIndexName;

Ví dụ chi tiết

Tạo bảng có UNIQUE constraint trên (Id, isGreaterThan18):

mysql> CREATE TABLE removeUniquenessConstraint (
    -> Id INT,
    -> Name VARCHAR(100),
    -> Age INT,
    -> isGreaterThan18 BOOL,
    -> UNIQUE(Id, isGreaterThan18)
    -> );

Xem cấu trúc bảng (SHOW CREATE TABLE):

CREATE TABLE `removeuniquenessconstraint` (
  `Id` int(11) DEFAULT NULL,
  `Name` varchar(100) DEFAULT NULL,
  `Age` int(11) DEFAULT NULL,
  `isGreaterThan18` tinyint(1) DEFAULT NULL,
  UNIQUE KEY `Id` (`Id`,`isGreaterThan18`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

→ Tên index tự động là Id (trùng tên cột đầu tiên)

Xóa unique constraint:

mysql> ALTER TABLE removeUniquenessConstraint DROP INDEX `Id`;
Query OK, 0 rows affected (0.25 sec)

Kiểm tra lại - UNIQUE KEY đã biến mất:

CREATE TABLE `removeuniquenessconstraint` (
  `Id` int(11) DEFAULT NULL,
  `Name` varchar(100) DEFAULT NULL,
  `Age` int(11) DEFAULT NULL,
  `isGreaterThan18` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Lưu ý quan trọng

  • Tên index để xóa là tên UNIQUE KEY (xem qua SHOW CREATE TABLE)
  • Nếu đặt tên rõ ràng khi tạo: UNIQUE KEY uk_name_age (Name, Age) thì xóa: DROP INDEX uk_name_age
  • Primary Key xóa bằng: ALTER TABLE ... DROP PRIMARY KEY
  • Foreign Key xóa bằng: ALTER TABLE ... DROP FOREIGN KEY fk_name

Kiểm tra các index hiện có

SHOW INDEX FROM yourTableName;