gpt4 book ai didi

mysql - 复合外键可以吗?

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

我有一张 table :

CREATE TABLE test_part1 ( 

Prefix ENUM('A','B') NOT NULL,
Unique_number int(11) NOT NULL,
Data_set1 decimal(5,2),
PRIMARY KEY (Prefix, Unique_number)
) ;

CREATE TABLE test_part2 (
composite_foregin_key tinytxt(12) NOT NULL,
Data1 varchar (11),
Data2 varchar (11)
) ;

如何引用表“test_part2”中“test_part1”的复合键作为外键?

我是否需要创建 2 个名为 fkPrefix 和 fkUnique_number 的列并使用相同的数据类型,或者我可以创建一个名为 composite_foregin_key 的列吗?

如果可以使用composite_foregin_key选项,我是否需要将复合键的数据类型更改为Prefix txt (1)和Unique_ number txt (11),因为composite_foregin_key将为txt (12)?

将 Prefix 和 Unique_number 连接在一起对我来说非常重要,因为 Unique_number 下的项目存储在条件 A 或 B 中,并且在引用时 Prefix 和 Unique_number 始终在一起。

我正在尝试尽可能多地学习计算机科学,但这不是我的专业领域,在从事这个项目之前,我很久以前就参与了基本的数据库架构。如果我的问题没有任何意义,请理解。如果需要的话,我会尝试用其他方式表达它。

最佳答案

syntax本身相当简单:

[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

请注意,[] 表示“可选”,| 表示“其中之一”,, ... 表示您可以添加更多类似的项目用逗号分隔 - 您实际上并不键入这些字符。

链接列的列类型需要匹配——单列外键也是如此。由于您的 test_part1 的 PK 由这两列组成:

Prefix ENUM('A','B') NOT NULL, 
Unique_number int(11) NOT NULL,

...我希望在 test_part2 中看到两个类似类型的列,但事实并非如此。您的 composite_foregin_key 候选者是 TINYTEXT 并且只有一列。

遵循这些准则:

CREATE TABLE test_part1 ( 
Prefix ENUM('A','B') NOT NULL,
Unique_number int(11) NOT NULL,
Data_set1 decimal(5,2),

PRIMARY KEY (Prefix, Unique_number)
);

CREATE TABLE test_part2 (
composite_foregin_key_1 ENUM('A','B') NOT NULL,
composite_foregin_key_2 int(11) NOT NULL,
Data1 varchar (11),
Data2 varchar (11),

CONSTRAINT test_part2_fk1 FOREIGN KEY (composite_foregin_key_1, composite_foregin_key_2)
REFERENCES test_part1 (Prefix, Unique_number)
);

即使(或特别)在学习时,使用有意义的名称也不是一个坏主意。

关于mysql - 复合外键可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45146806/

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