SQL2008怎么删除有外键约束的表?

createtablestudent(snochar(7)primarykey,snamenvarchar(10)notnull,ssexnchar(2)check(ss... create table student(
sno char(7) primary key,
sname nvarchar(10) not null,
ssex nchar(2) check(ssex='男' or ssex='女'),
sage int check(sage>=15 and sage<=45),
sdept char(20) default '计算机系'
)

create table course(
cno char(10) primary key,
cname nvarchar(20) not null,
ccredit int check(ccredit>0),
semster int check(semster>0),
period int check(period>0)
)

create table sc(
sno char(7),
cno char(10),
grade int check(grade>=0 and grade<=100),
primary key(sno,cno),
foreign key(sno) references student(sno),
foreign key(cno) references course(cno)
)

创建了这三个表并写入了数据

想drop table student 执行后显示无法删除对象 'student',因为该对象正由一个 FOREIGN KEY 约束引用。
展开
 我来答
大野瘦子
高粉答主

2018-12-13 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:34.5万
展开全部

1、自动生成所有的DROP语句,将其中的MyDatabaseName替换成你的数据库名称:

SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')

FROM information_schema.tables

WHERE table_schema = 'MyDatabaseName'; 

2、然后,在生成的代码前后添加下面设置FOREIGN_KEY_CHECKS变量的语句:

SET FOREIGN_KEY_CHECKS = 0

-- DROP语句

SET FOREIGN_KEY_CHECKS = 1;

扩展资料:

外键约束可双击关系线添加外键约束,外键约束有四种不同的选项:CASCADE, SET NULL, NO ACTION, RESTRICT。

1、CASCADE : 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。[ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。]

2、SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。[注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。]

3、NO ACTION: InnoDB拒绝删除或者更新父表。

4、RESTRICT: 拒绝删除或者更新父表。[指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。]

wangzhiqing999
2011-10-24 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3351万
展开全部
办法1
首先删除 sc 表
然后再删除 student 表

办法2
删除 sc 表上面的外键
然后再删除 student 表
更多追问追答
追问
怎么删除sc上的外键啊?能帮我写下代码吗
追答
select 
oSub.name AS [子表名称],
fk.name AS [外键名称],
SubCol.name AS [子表列名],
oMain.name AS [主表名称],
MainCol.name AS [主表列名]
from
sys.foreign_keys fk
JOIN sys.all_objects oSub
ON (fk.parent_object_id = oSub.object_id)
JOIN sys.all_objects oMain
ON (fk.referenced_object_id = oMain.object_id)
JOIN sys.foreign_key_columns fkCols
ON (fk.object_id = fkCols.constraint_object_id)
JOIN sys.columns SubCol
ON (oSub.object_id = SubCol.object_id
AND fkCols.parent_column_id = SubCol.column_id)
JOIN sys.columns MainCol
ON (oMain.object_id = MainCol.object_id
AND fkCols.referenced_column_id = MainCol.column_id)
where
oSub.name = 'sc'
AND oMain.name = 'student'

查询出那个 sc 表上面的 外键名称
然后

ALTER TABLE sc DROP CONSTRAINT 外键名称;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式