经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
SQL Server多个主键与外键、复合主键与外键引用
来源:cnblogs  作者:MaricoCheung  时间:2020/11/9 15:55:59  对本文有异议

一、SQL查表语句执行机制

1、逻辑执行顺序:从上到下,先有后走

2、否则报错:"对象名无效"、"外键 'FK__学生表__6CD828CA' 引用了无效的表 '宿舍表'"

  1. CREATE TABLE 学生表(
  2. 学号 char(8) primary key,
  3. 楼号 char(2) not null,
  4. foreign key(楼号) references 宿舍表(楼号),
  5. );
  6. CREATE TABLE 宿舍表(
  7. 楼号 char(2) not null,
  8. primary key(楼号),
  9. );

3、解决方法:调整建表顺序(先有主键,才可引用外键)

  1. CREATE TABLE 宿舍表(
  2. 楼号 char(2) not null,
  3. primary key(楼号),
  4. );
  5. CREATE TABLE 学生表(
  6. 学号 char(8) primary key,
  7. 楼号 char(2) not null,
  8. foreign key(楼号) references 宿舍表(楼号),
  9. );

 

二、1:1多个单一外键引用不同表单一主键

(1)例题:

  1. Create table 图书表(
  2. 书号 nchar(6) primary key,
  3. )
  4. Create table 书店表(
  5. 书店编号 nchar(6) primary key,
  6. )
  7. Create table 图书销售表(
  8. 书号 nchar(6) not null,
  9. 书店编号 nchar(6) not null,
  10. 销售日期 smalldatetime not null,
  11. primary key(书号,书店编号,销售日期),
  12. foreign key(书号) references 图书表(书号),
  13. foreign key(书店编号) references 书店表(书店编号)
  14. )

(2)删表:得先删有引用外键约束的表

 

三、n:m复合外键引用同一表复合主键

(1)1:n不符合语法逻辑,报错:在被引用表 '宿舍表' 中没有与外键 'FK__学生表__楼号__793DFFAF' 中的引用列列表匹配的主键或候选键。

  1. CREATE TABLE 宿舍表(
  2. 楼号 char(2) not null,
  3. 宿舍号 char(3) not null,
  4. primary key(楼号,宿舍号),
  5. );
  6. CREATE TABLE 学生表(
  7. 学号 char(8) primary key,
  8. 楼号 char(2) not null,
  9. 宿舍号 char(3) not null,
  10. foreign key(楼号) references 宿舍表(楼号),
  11. foreign key(宿舍号) references 宿舍表(宿舍号),
  12. );

(2)解决方法:同一表复合外键对应引用同一表复合主键

  1. CREATE TABLE 宿舍表(
  2. 楼号 char(2) not null,
  3. 宿舍号 char(3) not null,
  4. primary key(楼号,宿舍号),
  5. );
  6. CREATE TABLE 学生表(
  7. 学号 char(8) primary key,
  8. 楼号 char(2) not null,
  9. 宿舍号 char(3) not null,
  10. foreign key(楼号,宿舍号) references 宿舍表(楼号,宿舍号),

 

 

原文链接:http://www.cnblogs.com/MaricoCheung/p/13868239.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号