MySQL DROP 所有表,忽略外键

Posted

技术标签:

【中文标题】MySQL DROP 所有表,忽略外键【英文标题】:MySQL DROP all tables, ignoring foreign keys 【发布时间】:2011-03-29 10:51:49 【问题描述】:

有没有一种简单的方法可以从 mysql 数据库中删除所有表,而忽略其中可能存在的任何外键约束?

【问题讨论】:

除非您有很多其他实体,否则为什么不直接删除数据库并从头开始? 保留用户权限。 我刚刚意识到,与此同时,您得到了比我更完整的 Dion Truter 的答案,并建议您接受它。 (“删除所有表”部分不在我的范围内) 仅供参考,如果您碰巧安装了 phpMyAdmin,则可以轻松选择所有表并删除它们。 确实如此,但仅适用于 4.x 版中的 phpMyAdmin。如果您选择所有表格并从下拉菜单中选择Drop,您可以取消选中Foreign key check 复选框。 【参考方案1】:

不使用过程从 SQL Select 查询中复制返回值的一步解决方案。

SET FOREIGN_KEY_CHECKS = 0;
SET SESSION group_concat_max_len = 1000000;

SET @TABLES = NULL;
SELECT GROUP_CONCAT('`', table_schema, '`.`', table_name,'`') INTO @TABLES FROM information_schema.tables 
  WHERE table_schema = 'databaseName';

SET @TABLES = CONCAT('DROP TABLE IF EXISTS ', @TABLES);

PREPARE stmt FROM @TABLES;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET SESSION group_concat_max_len = 1024;
SET FOREIGN_KEY_CHECKS = 1

【讨论】:

【参考方案2】:

我发现生成的 drop 语句集很有用,并推荐以下调整:

    将生成的 drop 限制在您的数据库中,如下所示:
SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';

注意 1:这不会执行 DROP 语句,它只是为您提供它们的列表。您需要将输出剪切并粘贴到 SQL 引擎中以执行它们。

注意 2:如果您有 VIEW,则必须手动将每个 DROP TABLE `VIEW_NAME` 语句更正为 DROP VIEW `VIEW_NAME`

    注意,根据http://dev.mysql.com/doc/refman/5.5/en/drop-table.html,级联删除是没有意义的/具有误导性的:

“允许 RESTRICT 和 CASCADE 使移植更容易。在 MySQL 5.5 中,它们什么都不做。”

因此,如果您需要,为了让 drop 语句起作用:

SET FOREIGN_KEY_CHECKS = 0

这将禁用参照完整性检查 - 因此,当您完成所需的删除操作后,您将需要重置密钥检查

SET FOREIGN_KEY_CHECKS = 1
    最终执行应如下所示:
SET FOREIGN_KEY_CHECKS = 0;
-- Your semicolon separated list of DROP statements here
SET FOREIGN_KEY_CHECKS = 1;

注意:为了更轻松地使用 SELECT 的输出,mysql -B 选项会有所帮助。

【讨论】:

@Timmm:我在答案中写了 3 滴 - 但是,这也不会执行它们。您必须从 *** 复制它们并将它们粘贴到您的 MySQL Workbench 或任何地方。通过上面的选择,您可以“免费”获得所有匹配的掉落物。你只需要复制粘贴它们。 是的,我知道,但我想在脚本中使用它。我最终实际做的是DROP DATABASE foo; CREATE DATABASE foo;,这并不完全相同,但对我有用。 有数百个表时不方便,但如果无法重新创建数据库,总比没有好。 @Timmmm:再看一遍 - 你是对的,它并没有完全回答这个问题。 Jean 的回答看起来很有希望 - 它既自动生成 DROP 语句并执行它们,同时在前后正确应用 SET FOREIGN_KEY_CHECKS。 如果您使用的是 linux 或 mac,请使用终端,它可以登录到您的 mysql 帐户类型:mysql -u -p 然后按 Enter 现在输入您的密码选择数据库,然后编写以上代码删除表【参考方案3】:

使用命令行中的一行从数据库中删除所有表:

mysqldump -u [user_name] -p[password] -h [host_name] --add-drop-table --no-data [database_name] | grep ^DROP | mysql -u [user_name] -p[password] -h [host_name] [database_name]

其中 [user_name]、[password]、[host_name] 和 [database_name] 必须替换为真实数据(用户、密码、主机名、数据库名)。

【讨论】:

【参考方案4】:

这是通过 bash 脚本自动执行此操作的方法:

host=$1
dbName=$2
user=$3
password=$4

if [ -z "$1" ]
then
    host="localhost"
fi

# drop all the tables in the database
for i in `mysql -h$host -u$user -p$password $dbName -e "show tables" | grep -v Tables_in` ; do  echo $i && mysql -h$host -u$user -p$password $dbName -e "SET FOREIGN_KEY_CHECKS = 0; drop table $i ; SET FOREIGN_KEY_CHECKS = 1" ; done

【讨论】:

真的很喜欢这个解决方案,但我看不到主机变量是如何使用的。它似乎没有在for循环中的任何mysql调用中使用。【参考方案5】:

简单明了(可能)。

可能不是一个花哨的解决方案,但这对我很有用并挽救了我的一天。

适用于服务器版本:5.6.38 MySQL 社区服务器 (GPL)

我遵循的步骤:

 1. generate drop query using concat and group_concat.
 2. use database
 3. disable key constraint check
 4. copy the query generated from step 1
 5. enable key constraint check
 6. run show table

MySQL 外壳

mysql> SYSTEM CLEAR;
mysql> SELECT CONCAT('DROP TABLE IF EXISTS `', GROUP_CONCAT(table_name SEPARATOR '`, `'), '`;') AS dropquery FROM information_schema.tables WHERE table_schema = 'emall_duplicate';
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| dropquery                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`; |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> USE emall_duplicate;
Database changed
mysql> SET FOREIGN_KEY_CHECKS = 0;                                                                                                                                                   Query OK, 0 rows affected (0.00 sec)

// copy and paste generated query from step 1
mysql> DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`;
Query OK, 0 rows affected (0.18 sec)

mysql> SET FOREIGN_KEY_CHECKS = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW tables;
Empty set (0.01 sec)

mysql> 

【讨论】:

【参考方案6】:
DB="your database name" \
    && mysql $DB < "SET FOREIGN_KEY_CHECKS=0" \
    && mysqldump --add-drop-table --no-data $DB | grep 'DROP TABLE' | grep -Ev "^$" | mysql $DB \
    && mysql $DB < "SET FOREIGN_KEY_CHECKS=1"

【讨论】:

【参考方案7】:

只需在此处输入一些有用的comment made by Jonathan Watt 即可删除所有表格

MYSQL="mysql -h HOST -u USERNAME -pPASSWORD DB_NAME"
$MYSQL -BNe "show tables" | awk 'print "set foreign_key_checks=0; drop table `" $1 "`;"' | $MYSQL
unset MYSQL

对我有帮助,希望对你有用

【讨论】:

【参考方案8】:

此解决方案基于@SkyLeach 答案,但支持使用外键删除表。

echo "SET FOREIGN_KEY_CHECKS = 0;" > ./drop_all_tables.sql
mysqldump --add-drop-table --no-data -u user -p dbname | grep 'DROP TABLE' >> ./drop_all_tables.sql
echo "SET FOREIGN_KEY_CHECKS = 1;" >> ./drop_all_tables.sql
mysql -u user -p dbname < ./drop_all_tables.sql

【讨论】:

【参考方案9】:

在主题上搜索总是让我想到这个 SO 问题,所以这里是删除两个表和视图的工作 mysql 代码:

DROP PROCEDURE IF EXISTS `drop_all_tables`;

DELIMITER $$
CREATE PROCEDURE `drop_all_tables`()
BEGIN
    DECLARE _done INT DEFAULT FALSE;
    DECLARE _tableName VARCHAR(255);
    DECLARE _cursor CURSOR FOR
        SELECT table_name
        FROM information_schema.TABLES
        WHERE table_schema = SCHEMA();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;

    SET FOREIGN_KEY_CHECKS = 0;

    OPEN _cursor;

    REPEAT FETCH _cursor INTO _tableName;

    IF NOT _done THEN
        SET @stmt_sql1 = CONCAT('DROP TABLE IF EXISTS ', _tableName);
        SET @stmt_sql2 = CONCAT('DROP VIEW IF EXISTS ', _tableName);

        PREPARE stmt1 FROM @stmt_sql1;
        PREPARE stmt2 FROM @stmt_sql2;

        EXECUTE stmt1;
        EXECUTE stmt2;

        DEALLOCATE PREPARE stmt1;
        DEALLOCATE PREPARE stmt2;
    END IF;

    UNTIL _done END REPEAT;

    CLOSE _cursor;
    SET FOREIGN_KEY_CHECKS = 1;
END$$

DELIMITER ;

call drop_all_tables();

DROP PROCEDURE IF EXISTS `drop_all_tables`;

【讨论】:

【参考方案10】:

从给定数据库中删除所有表的单行:

echo "DATABASE_NAME"| xargs -I sh -c "mysql -Nse 'show tables' | xargs -I[] mysql -e 'SET FOREIGN_KEY_CHECKS=0; drop table []' "

运行此命令将从数据库 DATABASE_NAME 中删除所有表。

还有一个好处是数据库名称只显式写入一次。

【讨论】:

这对我有用,但是我不得不在 macOS High Sierra 上将 -i 替换为 -I 谢谢@AliSelcuk。 -i 和 -I 都适用于 Ubuntu,因此我将其更改为 -I 以便它也适用于 macOS。 很有用,谢谢!我必须使用 -pPASSWORD(-p 和 PASSWORD 之间没有空格)将密码传递给两个 mysql 命令【参考方案11】:

在@Dion Truter 和@Wade Williams 的回答的基础上,以下shell 脚本将删除所有表,在首先显示它将要运行的内容之后,并让您有机会使用Ctrl-C 中止。

#!/bin/bash

DB_HOST=xxx
DB_USERNAME=xxx
DB_PASSWORD=xxx
DB_NAME=xxx

CMD="mysql -sN -h $DB_HOST -u $DB_USERNAME -p$DB_PASSWORD $DB_NAME"

# Generate the drop statements
TMPFILE=/tmp/drop-$RANDOM.sql
echo 'SET FOREIGN_KEY_CHECKS = 0;' > $TMPFILE
$CMD $@ >> $TMPFILE << ENDD
    SELECT concat('DROP TABLE IF EXISTS \`', table_name, '\`;')
    FROM information_schema.tables
    WHERE table_schema = '$DB_NAME';
ENDD
echo 'SET FOREIGN_KEY_CHECKS = 1;' >> $TMPFILE

# Warn what we are about to do
echo
cat $TMPFILE
echo
echo "Press ENTER to proceed (or Ctrl-C to abort)."
read

# Run the SQL
echo "Dropping tables..."
$CMD $@ < $TMPFILE
echo "Exit status is $?."
rm $TMPFILE

【讨论】:

【参考方案12】:

目前为止对我来说最好的解决方案

选择数据库 -> 右键单击​​ -> 任务 -> 生成脚本 - 将打开生成脚本的向导。在设置脚本选项中选择对象后,单击高级按钮。在 "Script DROP and CREATE" 下选择 Script DROP

运行脚本。

【讨论】:

它几乎工作了,但我在蓝色按钮之前点击了绿色按钮,然后我在左边有一个框,然后我点击了取消,但后来我喝了咖啡就忘记了。 你能解释一下你点击的地方吗?有没有这方面的工具? Azza,您忘记提及您引用的应用程序的名称。编辑您的答案并将其包含在内,这样未来的人就会知道并可能会支持您的答案。【参考方案13】:

上述每种方法都比 AFAICT 包含更多的工作......

( mysqldump --add-drop-table --no-data -u root -p database | grep 'DROP TABLE' ) > ./drop_all_tables.sql
mysql -u root -p database < ./drop_all_tables.sql

【讨论】:

为什么不直接通过管道将mysqldump 传输到mysql,而不通过文件? @Rolf 没有特别的原因。把自己打晕。 谢谢,我已经这样做了,删除括号并将mysqldump 输入grep 输入mysql,它可以工作。再次感谢您的解决方案,很好。 这个缺少外键约束;我根据您的回答在此处添加了一个 bash 脚本:gist.github.com/cweinberger/c3f2882f42db8bef9e605f094392468f 太聪明了!【参考方案14】:

这是一篇相当老的帖子,但这里的答案都没有真正回答我认为的问题,所以我希望我的帖子对人们有所帮助!

我在另一个对我来说非常有效的问题上找到了这个解决方案:

mysql -Nse 'show tables' DB_NAME | while read table; do mysql -e "SET FOREIGN_KEY_CHECKS=0; truncate table \`$table\`" DB_NAME; done

这实际上会清空数据库DB_NAME 中的所有表,而不仅仅是显示TRUNCATE 命令行。

希望这会有所帮助!

【讨论】:

有用,但并不能真正回答问题。【参考方案15】:

我在 MSSQL 服务器上使用以下内容:

if (DB_NAME() = 'YOUR_DATABASE') 
begin
    while(exists(select 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='FOREIGN KEY'))
    begin
         declare @sql nvarchar(2000)
         SELECT TOP 1 @sql=('ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + '] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']')
         FROM information_schema.table_constraints
         WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
         exec (@sql)
         PRINT @sql
    end

    while(exists(select 1 from INFORMATION_SCHEMA.TABLES))
    begin
         declare @sql2 nvarchar(2000)
         SELECT TOP 1 @sql2=('DROP TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']')
         FROM INFORMATION_SCHEMA.TABLES
        exec (@sql2)
        PRINT @sql2
    end
end
else
    print('Only run this script on the development server!!!!')

将 YOUR_DATABASE 替换为您的数据库名称或删除整个 IF 语句(我喜欢增加的安全性)。

【讨论】:

【参考方案16】:

如果在 linux(或任何其他支持管道、echo 和 grep 的系统)中,你可以用一行来完成:

echo "SET FOREIGN_KEY_CHECKS = 0;" > temp.txt; \
mysqldump -u[USER] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP >> temp.txt; \
echo "SET FOREIGN_KEY_CHECKS = 1;" >> temp.txt; \
mysql -u[USER] -p[PASSWORD] [DATABASE] < temp.txt;

我知道这是一个老问题,但我认为这种方法既快速又简单。

【讨论】:

【参考方案17】:

来自http://www.devdaily.com/blog/post/mysql/drop-mysql-tables-in-any-order-foreign-keys:

SET FOREIGN_KEY_CHECKS = 0;
drop table if exists customers;
drop table if exists orders;
drop table if exists order_details;
SET FOREIGN_KEY_CHECKS = 1;

(请注意,这回答了如何禁用外键检查以便能够以任意顺序删除表。它没有回答如何为所有现有表自动生成删除表语句并在单个脚本中执行它们.Jean 的回答确实如此。)

【讨论】:

如果您使用 MySQL Workbench,您可以通过选择左侧列中的所有表,右键单击,然后选择“删除表”选项来避免键入所有表名。 IT 将生成您可以在 SET FOREGIN_KEY_CHECKS 语句之间复制和粘贴的 SQL - 可能在其他 GUI 中也类似。 感谢有帮助,@chris 超级有帮助,应该添加答案【参考方案18】:

在像 bash/zsh 这样的 Linux shell 中:

DATABASE_TO_EMPTY="your_db_name";
 echo "SET FOREIGN_KEY_CHECKS = 0;" ; \
  mysql "$DATABASE_TO_EMPTY" --skip-column-names -e \
  "SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') \
   FROM information_schema.tables WHERE table_schema = '$DATABASE_TO_EMPTY';";\
   | mysql "$DATABASE_TO_EMPTY"

这将生成命令,然后立即将它们通过管道传送到将删除表的第二个客户端实例。

聪明的一点当然是从这里的其他答案中复制而来的——我只是想要一个可复制粘贴的单行(ish)来真正 OP 想要的工作。

注意当然,您也必须在这些 mysql 命令中(两次)输入您的凭据,除非您的安全设置非常低。 (或者您可以为您的 mysql 命令别名以包含您的凭据。)

【讨论】:

【参考方案19】:

来自this answer,

执行:

  use `dbName`; --your db name here
  SET FOREIGN_KEY_CHECKS = 0; 
  SET @tables = NULL;
  SET GROUP_CONCAT_MAX_LEN=32768;

  SELECT GROUP_CONCAT('`', table_schema, '`.`', table_name, '`') INTO @tables
  FROM   information_schema.tables 
  WHERE  table_schema = (SELECT DATABASE());
  SELECT IFNULL(@tables, '') INTO @tables;

  SET        @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
  PREPARE    stmt FROM @tables;
  EXECUTE    stmt;
  DEALLOCATE PREPARE stmt;
  SET        FOREIGN_KEY_CHECKS = 1;

这会从当前使用的数据库中删除表。您可以使用use 设置当前数据库。


否则,Dion 接受的答案更简单,只是您需要执行两次,第一次是获取查询,第二次是执行查询。我提供了一些愚蠢的反引号来转义数据库和表名中的特殊字符。

  SELECT CONCAT('DROP TABLE IF EXISTS `', table_schema, '`.`', table_name, '`;')
  FROM   information_schema.tables
  WHERE  table_schema = 'dbName'; --your db name here

【讨论】:

短而干净的解决方案。比程序替代方案好得多。【参考方案20】:

在 php 中很简单:

$pdo = new PDO('mysql:dbname=YOURDB', 'root', 'root');

$pdo->exec('SET FOREIGN_KEY_CHECKS = 0');

$query = "SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')
          FROM information_schema.tables
          WHERE table_schema = 'YOURDB'";

foreach($pdo->query($query) as $row) 
    $pdo->exec($row[0]);


$pdo->exec('SET FOREIGN_KEY_CHECKS = 1');

只需记住将 YOURDB 更改为您的数据库的名称,当然还有用户/密码。

【讨论】:

【参考方案21】:

我对 Dion Truter 的回答提出了这个修改,以便更轻松地处理许多表格:

SET GROUP_CONCAT_MAX_LEN = 10000000;
SELECT CONCAT('SET FOREIGN_KEY_CHECKS=0;\n', 
              GROUP_CONCAT(CONCAT('DROP TABLE IF EXISTS `', table_name, '`')
                           SEPARATOR ';\n'),
              ';\nSET FOREIGN_KEY_CHECKS=1;')
FROM information_schema.tables
WHERE table_schema = 'SchemaName';

这会在一个字段中返回整个内容,因此您可以复制一次并删除所有表(在 Workbench 中使用 Copy Field Content (unquoted))。如果您有很多表,您可能会在GROUP_CONCAT() 上遇到一些限制。如果是这样,请增加 max len 变量(和max_allowed_packet,如有必要)。

【讨论】:

SET GROUP_CONCAT_MAX_LEN 是我需要的技巧。我有一个正在运行的脚本,但第一次总是以一些截断的表名失败,然后在第二次运行时成功完成。谢谢!【参考方案22】:

这里是 SurlyDre 的存储过程被修改以便忽略外键:

DROP PROCEDURE IF EXISTS `drop_all_tables`;

DELIMITER $$
CREATE PROCEDURE `drop_all_tables`()
BEGIN
    DECLARE _done INT DEFAULT FALSE;
    DECLARE _tableName VARCHAR(255);
    DECLARE _cursor CURSOR FOR
        SELECT table_name 
        FROM information_schema.TABLES
        WHERE table_schema = SCHEMA();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;

    SET FOREIGN_KEY_CHECKS = 0;

    OPEN _cursor;

    REPEAT FETCH _cursor INTO _tableName;

    IF NOT _done THEN
        SET @stmt_sql = CONCAT('DROP TABLE ', _tableName);
        PREPARE stmt1 FROM @stmt_sql;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
    END IF;

    UNTIL _done END REPEAT;

    CLOSE _cursor;
    SET FOREIGN_KEY_CHECKS = 1;
END$$

DELIMITER ;

call drop_all_tables(); 

DROP PROCEDURE IF EXISTS `drop_all_tables`;

【讨论】:

适用于表格,无法删除视图。仍然大大减少了我的打字:)谢谢。 7 年后我会说你应该用反引号包裹_tableName。否则它会在某些表上失败,例如 group 或其他关键字。 注意观看! SELECT table_name FROM information_schema.TABLES WHERE table_schema = SCHEMA() AND table_type="BASE TABLE";【参考方案23】:

这是一个基于光标的解决方案。有点长,但可以作为单个 SQL 批处理:

DROP PROCEDURE IF EXISTS `drop_all_tables`;

DELIMITER $$
CREATE PROCEDURE `drop_all_tables`()
BEGIN
    DECLARE _done INT DEFAULT FALSE;
    DECLARE _tableName VARCHAR(255);
    DECLARE _cursor CURSOR FOR
        SELECT table_name 
        FROM information_schema.TABLES
        WHERE table_schema = SCHEMA();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;

    OPEN _cursor;

    REPEAT FETCH _cursor INTO _tableName;

    IF NOT _done THEN
        SET @stmt_sql = CONCAT('DROP TABLE ', _tableName);
        PREPARE stmt1 FROM @stmt_sql;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
    END IF;

    UNTIL _done END REPEAT;

    CLOSE _cursor;

END$$

DELIMITER ;

call drop_all_tables(); 

DROP PROCEDURE IF EXISTS `drop_all_tables`;

【讨论】:

不错,但不幸的是它不处理外键。【参考方案24】:

你可以这样做:

select concat('drop table if exists ', table_name, ' cascade;')
  from information_schema.tables;

然后运行生成的查询。他们将删除当前数据库中的每一个表。

Here 是对drop table 命令的一些帮助。

【讨论】:

以上答案假定|| 设置为连接运算符。更具体地说,MySQL SQL 模式包含PIPES_AS_CONCAT。参考:dev.mysql.com/doc/refman/5.0/en/… @Ionut:酷!感谢您指出了这一点。修复了代码示例以使用 concat 而不是 ||

以上是关于MySQL DROP 所有表,忽略外键的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基础之 主键外键设置

mysql数据库怎么删除一个表的外键

( 10 )MySQL中的外键

Mysql主键外键和索引的区别

MySQL 主键外键

Oracle查看表索引、主键、外键、约束