删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心。但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情;另外在测试的时候,也有需要重新创建数据库的所有表。当然很多自动化工具也可以做这样的事情。

删除表的时候有时会遇到这样的错误消息:

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

这是因为你尝试删除的表中的字段被用作了其他表的外键,因此在删除这个表(父表)之前必须先删除具有外键的表(子表)。也就是说,删除表的过程需要和创建表的过程一致。

但是这往往不可接受,一方面如果表太多了,手动排序有点不可接受;另一方面,现在还没有自动的工具对进行排序(其实也不是不能实现)。因此,MySQL中提供了一个变量FOREIGN_KEY_CHECKS来设置是否在必要的时候检查外键约束。

一般比较推荐这样做:

首先,自动生成所有的DROP语句,将其中的MyDatabaseName替换成你的数据库名称:

SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')

FROM information_schema.tables

WHERE table_schema = 'MyDatabaseName';

然后,在生成的代码前后添加下面设置FOREIGN_KEY_CHECKS变量的语句:

SET FOREIGN_KEY_CHECKS = 0

-- DROP语句

SET FOREIGN_KEY_CHECKS = 1;

不过,要是忘记了最后一句也没太大关系,这个变量是基于Session的,也就是说,当你关闭了客户端,重新建立连接的时候,这个变量会恢复默认值。如果需要在全局范围内不检查外键约束(这种情况会比较少吧),可以这样做:

SET GLOBAL FOREIGN_KEY_CHECKS = 0;

或者

set @@global.FOREIGN_KEY_CHECKS = 0;

以上这篇MySQL删除表的时候忽略外键约束的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持找一找教程网。

mysql 删除表时外键约束_MySQL删除表的时候忽略外键约束的简单实现相关推荐

  1. 在计算机系统中对文件执行彻底删除,怎么让电脑删除文件时可以直接彻底进行删除...

    让电脑删除文件时可以直接彻底进行删除的方法是什么?我们使用电脑时删除的资料.文件都是会转存到回收站里面的,想要彻底删除还需要到回收站进行删除,不少用户感觉太麻烦了.那么有什么方法可以直接彻底删除文件呢 ...

  2. 打印设置自定义表尾_打印excel工作表时,如何把表头和表尾一起打印到每一页上?-excle怎样设置表尾打印...

    打印excel表格,怎么设置使每页都有表头和表尾 一.表头设置 1.点击excle工具栏的"页面布局"选项,选择"打印"按钮,进行页面设置: 2.点击" ...

  3. Spark广播变量之超大表left join小表时如何进行优化以及小表的正确位置

    Spark广播变量之大表left join小表时如何进行优化以及小表的正确位置放置,带着这个目标我们一探究竟. 项目场景: 最近工作中遇到一个场景: 有一个超大表3.5T和一个小表963K 需要做关联 ...

  4. mysql数据库怎么添加主键约束_mysql修改表时怎么添加主键约束?

    mysql中可以通过"ALTER TABLE 表名 ADD PRIMARY KEY(字段名);"语句在修改数据表时添加主键约束:当在修改表时要设置表中某个字段的主键约束时,要确保设 ...

  5. 如何增加mysql主键约束_mysql修改表时怎么添加主键约束?

    mysql中可以通过"ALTER TABLE 表名 ADD PRIMARY KEY(字段名);"语句在修改数据表时添加主键约束:当在修改表时要设置表中某个字段的主键约束时,要确保设 ...

  6. mysql创建主键约束_mysql建表键约束(主键约束,自增约束)

    -- 主键约束: id int primary key 可以唯一确定一张表中的一条记录,也就是通过给某个字段添加约束,就可以使得字段不重复且不为空. create table date ( id in ...

  7. mysql用命令修改主键名_MySQL的常用命令:添加外键,修改字段名称,增加字段 设置主键自增长等...

    Mysql命令添加外键 前提是有这么几个表   以mall_product 和 mall_category为例 ALTER TABLE mall_product ADD CONSTRAINT fore ...

  8. mysql用命令修改主键名_MySQL的常用命令:添加外键,修改字段名称,增加字段 设置主键自增长等 落楝花...

    Mysql命令添加外键 前提是有这么几个表   以mall_product 和 mall_category为例 ALTER TABLE mall_product ADD CONSTRAINT fore ...

  9. mysql myisam 主键关联_MySQL中myisam和innodb的主键索引有什么区别?

    MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索 ...

最新文章

  1. 十九种损失函数,你能认识几个?
  2. #1045 - Access denied for user 'root'@'localhost' (using password: NO)
  3. 中国大学mooc慕课python答案_中国大学MOOC(慕课)Python编程基础题目答案
  4. LeetCode MySQL 1194. 锦标赛优胜者
  5. 纳米颗粒C语言数值模拟_J.Hazard. Mater.当“金属纳米酶”邂逅“重金属离子”:机遇与挑战...
  6. epoll 性能分析(解决占用CPU 过高问题)2
  7. Excel 使用技巧之 -- 统计、过滤与引用数据
  8. 使用HTML5技术控制电脑或手机上的摄像头(转载)
  9. 你踩过dataguard的哪些坑?
  10. 微软发布TypeScript用以改进JavaScript开发
  11. validation 开始日期 结束日期_Spring Boot集成validation用于优雅的校验API参数的合法性...
  12. 最炫黑科技还得谷歌!一副眼镜告别学外语,一个地图App在家沉浸式环球游
  13. amoeba mysql mmm_MMM+Amoeba搭建MySQL高可用负载均衡群集
  14. python练习五——PTA
  15. 从实战学习微信小程序-电商星星评分功能(五)
  16. 【夜读】丰富自己的4个习惯,请逼自己养成
  17. Java什么时候会触发类初始化及原理(详解)
  18. JVM笔记(三):垃圾回收篇
  19. LAD线性判别分析鸢尾花预测
  20. App渠道推广统计:安卓渠道分析和渠道效果统计方法

热门文章

  1. /dev/tty和/dev/console
  2. 关于PF_INET和AF_INET的区别
  3. 无盘服务器性能测试,无盘系统性能测试及结语
  4. 多重响应交叉表点不动确定_风靡全球的尼克巨星登陆杭城!还有19.9元美食、多重惊喜好礼……嗨翻12月!...
  5. vue 多页面应用例子_【微服务】137:Vue之生命周期钩子
  6. 固件 日立 硬盘_最强性价比储存方案体验:这硬盘盒,真香!
  7. python如何写各种小工具_python写了个小工具
  8. 两个iphone怎么大量传照片_外出旅行、出差时,同品牌手机如何实现面对面零流量秒传照片?...
  9. python纵向制表符命令_Python中raw_input()中子命令的制表符完成
  10. 西门子smartclient怎么用_西门子200SMART PLC软件各功能怎么用?编程必备!