Tôi sẽ cải thiện điều này khi tôi đi. MySQL sẽ đáp ứng mong muốn của bạn, thậm chí cho phép bạn bắn vào chân mình khi bạn đi:
create table t9
(
id int auto_increment primary key,
thing varchar(20) not null,
key(thing),
unique key (thing),
unique key `yet_another` (thing)
);
-- warning 1831 dupe index
show create table t9;
CREATE TABLE `t9` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`thing` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `thing_2` (`thing`),
UNIQUE KEY `yet_another` (`thing`),
KEY `thing` (`thing`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Vì vậy, hãy xem xét tất cả các hành lý mà bạn phải mang theo cùng với các cảnh báo của bạn (đọc:các chỉ số không cần thiết bổ sung chậm).
Vì vậy, nếu bạn muốn nó gọn gàng nhất có thể, như tôi đã đề cập trong phần nhận xét, trước tiên hãy thư giãn mọi thứ bằng cách bỏ FK trong bảng con, tham chiếu Đầu tiên. Xem Câu trả lời này .
Sau đó, thả khóa mẹ không phải duy nhất hiện tại:
DROP INDEX index_name ON tbl_name;
Sau đó, thêm khóa duy nhất trong cha mẹ. Đây là được tham chiếu mới :
CREATE UNIQUE INDEX idxName ON tbl_name (colName);
Sau đó, thêm FK's vào phần con ( tham chiếu )
CREATE INDEX idxName ON child_tbl_name (colName);
Bạn có thể lấy các tên khóa bằng cách show create table theTableName
hoặc bởi SHOW INDEX
. Sử dụng tên mới cho những cái mới, điều đó không quan trọng.
Chẳng hạn như:
mysql> show index from t9;
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| t9 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| t9 | 0 | thing_2 | 1 | thing | A | 0 | NULL | NULL | | BTREE | | |
| t9 | 0 | yet_another | 1 | thing | A | 0 | NULL | NULL | | BTREE | | |
| t9 | 1 | thing | 1 | thing | A | 0 | NULL | NULL | | BTREE | | |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+