首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在MySQL中列级定义时未创建外键?

问为什么在MySQL中列级定义时未创建外键?
EN

Stack Overflow用户
提问于 2022-05-23 18:40:14
回答 1查看 133关注 0票数 0

我使用以下SQL命令创建了一个名为“Student”的父表,其两个列分别为“rollno”和“name”:

创建表学生( rollno主键,名称char(30) );

我在列级别定义了主约束,并创建了主键。但是,当我使用以下SQL命令创建子表“Score”时,该表包含两个列,分别为“rollno”和“mark”:

创建表格分数( rollno引用学生(Rollno),标记int );

未创建外键(在列级别定义时)。我也没犯任何错误。如果在表级别应用外键约束,则创建外键。

因此,我怀疑为什么在列级别定义外键时不创建外键,而在列级别定义时创建主键?

我正在使用最新版本的MySQL。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-23 19:05:49

这是MySQL中的一个特性请求,可以追溯到2004年,但它从未实现过。https://bugs.mysql.com/bug.php?id=4919

解决方法是使用表级外键约束语法,即使您的情况允许列级约束,因为它只适用于单个列。

代码语言:javascript
复制
create table Score ( 
 rollno int, 
 marks int,
 foreign key(rollno) references student(rollno) 
);

缺少这个特性的原因可能并不令人满意,但这里是InnoDB架构师的原因:

MySQL没有给出语法错误,因为1990年代的意图是包含外键约束的表定义应该输入到MySQL,尽管当时MySQL不支持外键。

对于其他根本不支持外键的存储引擎(例如MyISAM),外键语法也会被接受但被忽略。不返回错误或警告,但未保存外键约束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72353410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档