sql 删除带外键约束的表的语句是什么 50
顺便说下,创建外键的时候没有标注名字,所以先找外键删除然后删表的方法就不必了。 展开
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
另外,根据楼主的意思,我猜想你可能想问的是有外码关联的数据删除的问题。以下简述:
通常情况下,从表中外键所在字段的数据取值只能取主键中存在的值或者取空值,从表中的数据可以随时删除,而主表中的数据如果被从表所参照,则不能直接删除,如果想直接删除主表中被参照的数据,需要在创建外键时指定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没试过,不知道你用哪种数据库,最好在你的系统中亲自试一下。
以上仅供参考。
删除语句如下:
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的
删除语句如下:
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的
现删除关联的外键名,才能再删除外键字段;
alter table 表名 drop foreign key 外键关联名;
alter table 表名 drop column ‘列名’