--删除所有外键约束
DECLARE c1 cursor forselect ‘alter table [‘+ object_name(parent_obj) + ‘] drop constraint [‘+name+‘]; ‘from sysobjectswhere xtype = ‘F‘open c1declare @c1 varchar(8000)fetch next from c1 into @c1while(@@fetch_status=0)beginexec(@c1)fetch next from c1 into @c1endclose c1deallocate c1
2删除所有的表
DECLARE c2 cursor forselect ‘drop table [‘+name +‘]; ‘from sysobjectswhere xtype = ‘u‘open c2declare @c2 varchar(8000)fetch next from c2 into @c2while(@@fetch_status=0)beginexec(@c2)fetch next from c2 into @c2endclose c2deallocate c2
以前在oracle中经常遇到没法删掉数据库的问题(因为一个用户对应一个数据库),所以必须要删除表(要先删除外检约束),在重新生成, 今天在sql试了试,
成功了。
sql中批量删除带有外键的所有表
标签:
小编还为您整理了以下内容,可能对您也有帮助:
SQL 怎样删除有外键约束的表
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选项的效果是一样的。]
SQL 怎样删除有外键约束的表
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选项的效果是一样的。]
如何删除sql中带外键的表数据?
为什么一定要一句话呢?一个sql语句不能同时删除两张表,除非通过外键级联删除或者触发器,最正常的做法当然是写成2个sql语句,然后用一个trans来保证数据一致性,如果非要用一个sql语句,可以有一个变通方法,写一侧存储过程,删除两张表,然后写的一句sql是执行这个存储过程
如何删除sql中带外键的表数据?
为什么一定要一句话呢?一个sql语句不能同时删除两张表,除非通过外键级联删除或者触发器,最正常的做法当然是写成2个sql语句,然后用一个trans来保证数据一致性,如果非要用一个sql语句,可以有一个变通方法,写一侧存储过程,删除两张表,然后写的一句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
SQL如何直接批量删除表
SQL直接批量删除表的方法步骤:
所需工具原料:phpmyadmin。
1.数据操作前进行数据备份。
2.看需要删除表的时间段,即什么时间开始到什么时间截至。记录下数据表名称和时间字段名称。
3.点击上部"SQL"按钮,进行sql语句执行。
4.打开文本框中输入命定执行:
delete from wp_posts where `post_date` >='2010-01-01 00:00:00' and `post_date` < '2014-12-14 22:00:00:00'。
【命令语句意思】:从wp_posts数据表的post_date字段中检索文章创建日期在2010年1月1日0时和2014年12月14日22时之间的数据进行删除操作。
5.成功后点击上部“浏览”按钮查看,表被删除,sql执行语句成功。
删除指令解析:
1.全部删除:delete from table 。
2.部分删除:delete from table a where nuid in(select nuid from table B)。
注意事项:
1.进行数据库操作前须要进行数据库备份。
2.数据库操作是删除数据文本,图片等上传文件不会受到影响。