MySQL 单次查询删除数据库中的所有表格

MySQL 单次查询删除数据库中的所有表格

在MySQL中,删除一个数据库中的所有表格可以非常耗时和繁琐。但是,如果您需要快速清除整个数据库中的所有表格,那么可以使用单次查询删除所有表格。

阅读更多:MySQL 教程

单次查询删除所有表格的语法

可以使用以下SQL语句,删除数据库中的所有表格:

DROP DATABASE testing;
CREATE DATABASE testing;
USE testing;

SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;

SELECT CONCAT('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = (SELECT DATABASE());

SELECT CONCAT('DROP TRIGGER IF EXISTS `', TRIGGER_NAME, '`;')
FROM information_schema.TRIGGERS
WHERE TRIGGER_SCHEMA = (SELECT DATABASE());

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

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

此语句会先将外键约束设置为0,然后将数据库中所有表格和触发器的名称拼接起来,并执行DROP TABLE和DROP TRIGGER命令以删除所有表格和触发器。

示例

我们可以使用以下示例来说明如何使用单次查询删除数据库中的所有表格。

假设我们有一个名为“testing”的数据库,并且在其中有以下四个表格:

CREATE TABLE users (
  id INT(11) AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(50) NOT NULL,
  password VARCHAR(50) NOT NULL
);

CREATE TABLE orders (
  id INT(11) AUTO_INCREMENT PRIMARY KEY,
  user_id INT(11) NOT NULL,
  item VARCHAR(50) NOT NULL,
  price Decimal(10,2) NOT NULL,
  FOREIGN KEY (user_id) REFERENCES users(id)
);

CREATE TABLE products (
  id INT(11) AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  price Decimal(10,2) NOT NULL
);

CREATE TABLE categories (
  id INT(11) AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL
);
Mysql

然后,我们可以使用以下SQL语句来删除所有表格:

DROP DATABASE testing;
CREATE DATABASE testing;
USE testing;

SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN = 32768;

SELECT CONCAT('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = (SELECT DATABASE());

SELECT CONCAT('DROP TRIGGER IF EXISTS `', TRIGGER_NAME, '`;')
FROM information_schema.TRIGGERS
WHERE TRIGGER_SCHEMA = (SELECT DATABASE());

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

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

然后我们再查看一遍数据库,会发现此时数据库已经没有表格了。

总结

单次查询删除数据库中所有表格是非常有用和方便的。使用上述SQL语句,您可以快速轻松地删除整个数据库中的所有表格,而不必手动删除每个表格,并避免了误操作所带来的麻烦。特别是在模拟测试环境时,可以使用这种查询快速清空数据,来进行接下来的测试工作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册