关于外键的写法

mkamio714 2013-03-03 12:52:21
几个数据表,还有一个关系图(存在主键和外键),写一个sql.

我把每个TABLE都用 CREATE TABLE写完,并用INSERT INTO写入数据,并在INSERT INTO的后面用了
select *from来显示每个table,我发现有时候会提示错误,就是说某某table已经存在,所以在每个CREATE TABLE 之前加了一个if判断语句 ,例如 If object_id('NAME') is not null DROP table NAME
这样的判断

此时代码没有问题,可以通过

之后在最后写外键,例如这样:

ALTER TABLE NAME
ADD FOREIGN KEY(ID_num)
REFERENCES DEPARTMENT(number)

有的代码没有问题,加了一些类似的代码后,有例如 ALTER TABLE与foreign key 冲突

有这样的关系:一个table里面的外键指向同一个table里的主键
以及 多个不同的table里面的外键同时指向另一个table里的主键

还有这样的错误:提示不能drop 某某table,因为被一个外键约束,此时如果删去那个判断,就提示table已存在,总之保留这个语句就说不能DROP,删掉这个语句就说不能创建,因为TABLE已存在。此时保留或删除那个If判断语句都不行。
...全文
384 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DBA_磊仔 2013-03-06
  • 打赏
  • 举报
回复
我觉得可以这样解释: 外键又叫外键约束,是指外键表上被约束的字段必须在主键表中存在 外键表存在的前提也是主键表必须存在 现在外键表没有删除,就想删除主键表,则违反了上述约束 要删除主键表,可以选择先删除约束,或者删除外键表
mkamio714 2013-03-06
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
建表、建约束然后再插入数据,你推倒重来吧
那请问能不能全部删除呢 例如我写一个程序,如果第一次没编译通过,那如果改正确了,那第二次应该编译通过,第一次没通过的编译不会影响第二次编译. 而SQL似乎是第一次创建的表还会影响第二次运行,是这样吗? 本人初学SQL,有些不太清楚,多谢指点.
發糞塗牆 2013-03-06
  • 打赏
  • 举报
回复
引用 5 楼 mkamio714 的回复:
引用 4 楼 DBA_Huangzj 的回复: 建表、建约束然后再插入数据,你推倒重来吧 那请问能不能全部删除呢 例如我写一个程序,如果第一次没编译通过,那如果改正确了,那第二次应该编译通过,第一次没通过的编译不会影响第二次编译. 而SQL似乎是第一次创建的表还会影响第二次运行,是这样吗? 本人初学SQL,有些不太清楚,多谢指点.
你删除干净了就不会有影响啊
發糞塗牆 2013-03-04
  • 打赏
  • 举报
回复
建表、建约束然后再插入数据,你推倒重来吧
习惯性蹭分 2013-03-04
  • 打赏
  • 举报
回复
先删除引用外键的表,再删除父表
mkamio714 2013-03-03
  • 打赏
  • 举报
回复
还有,环境是SQL Server 2012 Management Studio
mkamio714 2013-03-03
  • 打赏
  • 举报
回复
现在就算把ALTER TABLE那些语句都删除,依然提示不能DROP某某TABLE,删除那个If判断语句就提示不能创建表.刚才在写ALTER TABLE之前没有这样的错误提示,而且代码都一样

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧