gpt4 book ai didi

mysql - 使用组合键中的一列作为外键

转载 作者:行者123 更新时间:2023-11-29 07:15:29 25 4
gpt4 key购买 nike

我试图看看是否可以使用复合键中的一列作为外键。我得到了奇怪的结果。

CREATE TABLE TESTPARENT(
PK1 INT,
PK2 INT,
PRIMARY KEY(PK1,PK2)
);

Query OK, 0 rows affected (0.01 sec)


CREATE TABLE TESTCHILD1(
FK1 INT,
FOREIGN KEY (FK1) REFERENCES TESTPARENT(PK1)
);

Query OK, 0 rows affected (0.01 sec)


CREATE TABLE TESTCHILD2(
FK2 INT,
FOREIGN KEY (FK2) REFERENCES TESTPARENT(PK2)
);

ERROR 1005 (HY000): Can't create table 'test.TESTCHILD2' (errno: 150)

MySQL 允许创建仅引用主键中第一列的外键,但不引用第二列。这很奇怪吗?还是我太傻了!

最佳答案

作为 MySQL 文档 foreign keys indicates :

InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are listed as the first columns in the same order.

NDB requires an explicit unique key (or primary key) on any column referenced as a foreign key.

所以,如果你使用innodb,那么MySQL不允许你在不是索引最左边字段的字段上创建外键。

原因是在多列索引中,您无法根据非最左边的字段查找值,因此索引无法用于快速查找外键检查的值。

MySQL 索引的这种行为在 multi-column indexes 上的 MySQL 文档中进行了描述。 :

MySQL cannot use the index to perform lookups if the columns do not form a leftmost prefix of the index.

关于mysql - 使用组合键中的一列作为外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38094819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com