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 name   

 from  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 删除带外键约束的表的语句是啥的主要内容,如果未能解决你的问题,请参考以下文章

SQL 怎样删除有外键约束的表

sql server解决无法删除修改拥有外键约束的表或表的记录字段

有外键约束的表,删除父表的数据,会出现哪几种情况?

ORACLE语句怎么删除外键约束,只是删约束,不是删表

如何在有外键关系的表中删除数据

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