Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

thêm duy nhất vào khóa ngoại hiện có

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      |         |               |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Câu lệnh chuẩn bị sẵn không hoạt động với các truy vấn bảng ALTER

  2. Solr 4.6.0 DataImportHandler tăng tốc hiệu suất

  3. Trả lại JSON từ MySQL với Tên cột

  4. Sự khác biệt giữa mysql.createConnection và mysql.createPool trong mô-đun Node.js MySQL là gì?

  5. Câu hỏi từ node.js đồng bộ