sql 删除带外键约束的表的语句是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 删除带外键约束的表的语句是啥相关的知识,希望对你有一定的参考价值。
如题,有两张互相外键约束的表,想直接删除其中一个以及与其关联的外键,求sql语句,谢谢。以前用过这种方法,现在忘记怎么写了。
顺便说下,创建外键的时候没有标注名字,所以先找外键删除然后删表的方法就不必了。
1、创建主键表,test_class,并建立class_id字段为主键;
create table test_class(class_id number, class_name varchar2(20));
-- Create/Recreate indexes
alter table TEST_CLASS
add constraint P_CLASS_ID primary key (CLASS_ID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255;
2、创建外键表,test_stu,其中字段class_id为test_class表的class_id字段;
create table test_stu(id number, class_id number);
-- Create/Recreate primary, unique and foreign key constraints
alter table TEST_STU
add constraint f_class_id foreign key (CLASS_ID)
references test_class (CLASS_ID) on delete cascade;
3、两张表分别插入记录;
insert into TEST_CLASS values(1001,'语文');
insert into TEST_CLASS values(1002,'数学');
insert into TEST_CLASS values(1003,'英语');
insert into TEST_STU values(1,1001);
insert into TEST_STU values(2,1001);
insert into TEST_STU values(3,1002);
insert into TEST_STU values(4,1003);
4、查询TEST_STU表中的记录;select t.*, rowid from test_stu;
5、删除主表TEST_CLASS中class_id=1001的记录,会发现从表TEST_STU中class_id中的记录也被删除;
delete test_class where class_id = 1001;
commit;
select t.*, t.rowid from TEST_STU t
参考技术A 拥有主键的表称为主表,拥有外键的表称为从表,从表可以直接删除,不受限制,但主表无法在从表还存在的情况下直接删除。另外,根据楼主的意思,我猜想你可能想问的是有外码关联的数据删除的问题。以下简述:
通常情况下,从表中外键所在字段的数据取值只能取主键中存在的值或者取空值,从表中的数据可以随时删除,而主表中的数据如果被从表所参照,则不能直接删除,如果想直接删除主表中被参照的数据,需要在创建外键时指定ON DELETE CASCADE或者ON DELETE SET NULL,即
FOREIGN KEY(从表中的某个字段) REFERENCES 主表(主键) ON DELETE CASCADE
或者
FOREIGN KEY(从表中的某个字段) REFERENCES 主表(主键) ON DELETE SET NULL
其中第一种方法表示删除主表中的数据时,从表中对应数据一起被强制删除;
第二种方法表示删除主表中的数据时,从表中对应数据设置为NULL
最后要注意的一点,这两个短语并非所有数据库管理系统都支持,印象中DB2、Oracle和SQL Server都支持,mysql没试过,不知道你用哪种数据库,最好在你的系统中亲自试一下。
以上仅供参考。 参考技术B
删除语句如下:
alter table 表名 drop constraint 外键约束名
使用如下SQL语句查询出表中外键约束名称:
select namefrom sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where f.parent_object_id=object_id('表名')
各个数据库有细微区别,以上提供的为sqlserver的
参考技术C 删除外键语句:现删除关联的外键名,才能再删除外键字段;
alter table 表名 drop foreign key 外键关联名;
alter table 表名 drop column ‘列名’
一次性删除数据库所有表和所有存储过程 SQL语句
一次性删除数据库所有表和所有存储过程 SQL语句
今天转移数据库数据,需要把数据库原来的表和存储过程清空。
删除所有的表:
如果由于外键约束删除table失败,则先删除所有约束:
--/第1步**********删除所有表的外键约束*************************/ DECLARE c1 cursor for select \'alter table [\'+ object_name(parent_obj) + \'] drop constraint [\'+name+\']; \' from sysobjects where xtype = \'F\' open c1 declare @c1 varchar(8000) fetch next from c1 into @c1 while(@@fetch_status=0) begin exec(@c1) fetch next from c1 into @c1 end close c1 deallocate c1 --/第2步**********删除所有表*************************/ use 数据库 declare @tname varchar(8000) set @tname=\'\' select @tname=@tname + Name + \',\' from sysobjects where xtype=\'U\' select @tname=\'drop table \' + left(@tname,len(@tname)-1) exec(@tname) ----清空存储过程 use [数据库名称] declare @tname varchar(8000) set @tname=\'\' select @tname=@tname + Name + \',\' from sysobjects where xtype=\'P\' select @tname=\'drop PROCEDURE \' + left(@tname,len(@tname)-1) exec(@tname)
转自:http://www.cnblogs.com/a-zx/articles/2405121.html
以上是关于sql 删除带外键约束的表的语句是啥的主要内容,如果未能解决你的问题,请参考以下文章