SQL2008怎么删除有外键约束的表?
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 约束引用。 展开
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选项的效果是一样的。]
首先删除 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 外键名称;