SQL中有主外键的两表到底那这是主表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中有主外键的两表到底那这是主表相关的知识,希望对你有一定的参考价值。

我现在彻底晕了 搞不清楚了; 现在有 tb_a 和 tb_b 两张表有主外键关系 分别有a_id 和 b_id(tb_b的主键)这两个列 那这两张表哪张是主表?谁有是谁的外键?

哪个是主表很重要么?如果两个表都有a_id 和 b_id,并且都是主键,那么就是互为主表。

以A为例,如果a.a_id是主键,那么就唯一不重复,a.b_id就是外键,关联B表(前提:b.b_id是主键)
互为外键的情况是很少的,因为这种情况几乎就是一一对应关系,范式上属于不合理结构
参考技术A 假设:表a(aid int primary key not null),b(bid int primary key not null,aid int FOREIGN KEY REFERENCES a(aid)),此时a表就是主表,b是从表,b表中的aid就是外键,参照的a的主键。 参考技术B 如果是这样的话 那么最好是再拆出一个关系表 里面只有 a_id 和 b_id 都是主键都是外键

Sql Server有主外键关系时添加删除数据

当表之间有主外键关系时删除数据会被约束,添加、删除失败

解决办法,我们可以先把主外键关系的检查约束给关掉 → 然后删除数据 → 之后再把约束打开

查询出关掉所有外键约束的语句

SELECT 
ALTER TABLE  + O.NAME +  NOCHECK CONSTRAINT [ + F.NAME + ]; AS COMMAND 
FROM 
SYS.FOREIGN_KEYS F INNER JOIN SYS.ALL_OBJECTS O ON F.PARENT_OBJECT_ID = O.OBJECT_ID 
WHERE O.TYPE = U AND F.TYPE = F;

查询出开启所有外键约束的语句,与上面的区别是将 NOCHECK 改为 CHECK

SELECT 
ALTER TABLE  + O.NAME +  CHECK CONSTRAINT [ + F.NAME + ]; AS COMMAND 
FROM 
SYS.FOREIGN_KEYS F INNER JOIN SYS.ALL_OBJECTS O ON F.PARENT_OBJECT_ID = O.OBJECT_ID 
WHERE O.TYPE = U AND F.TYPE = F;

 

以上是关于SQL中有主外键的两表到底那这是主表的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver删除有主外键的数据

MySQL多表

如何修改数据库中主外键约束的数据?

11.21

MySQL学习——外键

Sql Server有主外键关系时添加删除数据