【问题标题】:Can we use constraint name of a primary key as foreign key reference?我们可以使用主键的约束名称作为外键引用吗?
【发布时间】:2020-05-25 10:33:31
【问题描述】:

例如,我正在创建两个表,如下所示:

create table A (
  department_id int,
  college_id int,
  constraint Pk_name primary key(department_id,college_id)
);

create table B (
  student_name varchar(75),
  department_id int,
  college_id int,
  foreign key(department_id,college_id) references A(Pk_name)
);

我可以这样写吗?

【问题讨论】:

  • 我正在使用 Mysql Workbench 8。我试过这个,但它给出了错误。错误是:“添加外键失败。缺少约束列'Pk_name'。”
  • 据我所知,没有数据库支持这样的扩展。
  • 我不知道有任何数据库支持它。虽然这看起来不是一个坏主意,但当数据库增长并最终拥有许多表时,它可能会令人困惑。此外,几乎没有人说出 PK 约束。有时 UNIQUE 约束比 PK 约束具有更多可见的名称。此外,引擎将如何区分列和约束名称?可能语法最终会比您在此处显示的更冗长。

标签: mysql sql ddl


【解决方案1】:

我不这么认为,因为 RDBMS 无法知道 PK_name 是列名称还是约束名称,所以我建议您是否坚持通常的做法:

create table A ( department_id int, college_id int, constraint Pk_name primary key(department_id,college_id) );

创建表 B ( 学生名 varchar(75), 部门 ID 整数, College_id 整数, 外键(department_id,college_id) 引用 A(department_id,college_id) );

我会在找到其他答案后更新答案。

【讨论】:

  • 感谢您回复我的问题。如果您找到答案,请更新它们。谢谢。
  • 非常好的点@anouaressayid。在任何情况下,语法都应该清楚地区分“列大小写”与“约束名称大小写”。
猜你喜欢
  • 2012-11-26
  • 2021-09-06
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
相关资源
最近更新 更多