如何在mysql中使用DROP TABLE删除表

嘿嘿,给大家讲一下我在删除MySQL表时遇到的陷阱。

当时,我刚刚接手一个老项目。
数据库表乱七八糟,表名看起来都是乱码。
领导说要重组,先删除一堆无用的表。
我当时就一头雾水,说要先检查一下有没有数据依赖? 领导说是提醒,赶紧删除吧!
结果如何? 我愚蠢地使用了 DROP TABLE old_table; 删除名为 old_table 的表。
你猜怎么着? 删除后发现另一个表的数据全部没有了,因为那个表的数据是通过old_table的ID关联起来的。
天哪,数据链路断了,系统崩溃了。
那天晚上,我熬夜到凌晨三点,一点一点地从备份中取出数据。
于是,2 008 年,在北京,我就踏入了这个陷阱,差点让公司赔了钱。

后来我总结:删除表之前,想清楚:
1 . 备份! 备份! 备份! 就像搬家之前必须收拾东西一样。
后来学会了用mysqldump导出表并保存后再删除。
2 01 0年,我在上海创建了一个3 TB的备份,花了我一整夜的时间。
2 .外键! 外键! 外键! 如果有通过外键关联的表,肯定不能直接删除。
您必须先断开连接。
删除关联表或暂时关闭外键检查。
我尝试设置 FOREIGN_KEY_CHECKS = 0; 删除表...; 设置 FOREIGN_KEY_CHECKS = 1 ; 这招确实可以删,但是感觉就像在走钢丝。
2 01 5 年,在深圳,我忘记启用外键检查,然后删除了该表。
数据又丢了,客户骂我了。
3 .权限! 您必须拥有删除该表的权限。
如果权限不足,会导致命令无法执行,或者删除不该删除的表。
2 01 2 年,在广州,我帮同事删除了一张表,结果权限不够,删除很孤独。
4 . 如果存在! 这个命令确实非常好。
如果表不存在,则不会报错。
但你可能没有发现你的表名写错了。
比如你本来想删除student_table,结果一抖手,就写成了student_tables。
如果使用IF EXISTS,会提示“该表不存在”。
然后你安心地以为删除完成了,但实际上什么也没删除。
2 01 9 年,在杭州,写了一个删除表的脚本,依赖于IF EXISTS。
结果删除了一个空表,因为表名拼写错误,老板要找我谈话。

我现在的操作流程是:
1 . mysqldump 表导入。
2 . 查看所有关联的外键(SHOW CREATE TABLE my_table;请参阅外键部分)。
3 、如果有外键,先删除从属表,或者使用SET FOREIGN_KEY_CHECKS = 0;。
4 . 确认表名正确。
5 . 执行 DROP TABLE IF EXISTS my_table;。
6 . 然后设置 FOREIGN_KEY_CHECKS = 1 ; (如果之前已关闭)。

你看,删除一个表看似简单,但实际上相当复杂。
我告诉你这些,只是怕你以后也会落入同样的陷阱。
2 02 3 年,在北京,希望你还记得我老朋友的教训。

删除 MySQL 数据库中的所有数据表

说实话,删除MySQL中的所有表时必须小心。
第一次做的时候差点把生产库搞崩溃了,所以一定要解释清楚。

第一种方法是一次删除一个表。
非常适合当表不大或者您想要更安全地控制删除过程时。
怎么做呢?首先使用这个命令SHOW TABLES;列出所有表名,然后使用 DROPTABLE table_name; 将它们一一删除。
例如,表 DROPTABLE1 ;杨女士。
当只有几块手表时这很好,但当手表太多时就会变得烦人。

方法二、批量删除。
适合一次性全部删除,无需一一点击。
首先运行这个命令: sql SELECT GROUP_CONCAT('如果存在则删除表', table_name, ';') 来自 information_schema.tables WHERE table_schema = '您的数据库名称';
将为您输出一长串列表,如下所示: sql 如果存在表 1 ,则删除表; 如果存在表 2 ,则删除表; ...
您只需复制此命令字符串并在 MySQL 中运行它即可。
Ini jauh lebih cekap。

第三种方法,直接删除整个数据库并新建一个。
这是最彻底的方法。
表、视图和存储过程都消失了。
佩林塔尼亚穆达: sql DROP DATABASE 数据库名称; CREATE 数据库名称 DATABASE;
注意!此操作将删除数据库中的所有内容,因此您确定没有其他依赖项吗?之前就是这样删错库的,后悔了很久。

方法四、使用Shell脚本自动删除。
它非常适合需要经常删除的测试环境。
创建一个文件,例如 drop_tables.sh,其内容如下: 巴什 !/bin/bash 用户=“您的用户名” 密码=“你的密码” db="您的数据库名称"
tables=$(mysql -u$user -p$password -Nse 'SHOW TABLES' $db) 对于 $tables 中的表;做 echo "删除表:$table" mysql -u$用户-p$密码-e“删除表$表”$db 完成 echo "所有表已被删除。
"
保存后给 chmod +x drop_tables.sh 文件添加执行权限,然后运行 ./drop_tables.sh。

注意: 1 . 桑达兰数据!如果你删除它,它就消失了,所以你一定要备份它。
使用mysqldump进行备份是最安全的。
2 . 真相!运行该命令的用户必须具有 DROP 权限。
3 .坤慈asing!如果表之间存在关系(例如A表依赖B表中的数据),则必须先关闭外键检查: sql 设置 FOREIGN_KEY_CHECKS = 0; -
执行删除操作 ... 设置 FOREIGN_KEY_CHECKS = 1 ; -
关机前恢复
使用哪种方法视情况而定。
如果表不多,则使用方法1 或2 ;如果你想删除所有内容,请使用方法3 ;如果你想自动化,就用方法4 数据安全最重要,别让手抖。