我使用以下SQL命令创建了一个名为“Student”的父表,其两个列分别为“rollno”和“name”:
创建表学生( rollno主键,名称char(30) );
我在列级别定义了主约束,并创建了主键。但是,当我使用以下SQL命令创建子表“Score”时,该表包含两个列,分别为“rollno”和“mark”:
创建表格分数( rollno引用学生(Rollno),标记int );
未创建外键(在列级别定义时)。我也没犯任何错误。如果在表级别应用外键约束,则创建外键。
因此,我怀疑为什么在列级别定义外键时不创建外键,而在列级别定义时创建主键?
我正在使用最新版本的MySQL。
发布于 2022-05-23 19:05:49
这是MySQL中的一个特性请求,可以追溯到2004年,但它从未实现过。https://bugs.mysql.com/bug.php?id=4919
解决方法是使用表级外键约束语法,即使您的情况允许列级约束,因为它只适用于单个列。
create table Score (
rollno int,
marks int,
foreign key(rollno) references student(rollno)
);缺少这个特性的原因可能并不令人满意,但这里是InnoDB架构师的原因:
MySQL没有给出语法错误,因为1990年代的意图是包含外键约束的表定义应该输入到MySQL,尽管当时MySQL不支持外键。
对于其他根本不支持外键的存储引擎(例如MyISAM),外键语法也会被接受但被忽略。不返回错误或警告,但未保存外键约束。
https://stackoverflow.com/questions/72353410
复制相似问题