从MYSQL中的所有表中删除数据

TIM*_*MEX 35 mysql sql

我有100个表,每个表有40,000行.我想进入MySQL并删除所有表中的所有行.

...如果可能的话,在1个声明中?

我想保留数据库和表.

zen*_*zen 31

在保留模式的同时截断所有表的最简单方法.

mysqldump -d -uuser -ppass --add-drop-table databasename > databasename.sql

mysql -uuser -ppass databasename < databasename.sql
Run Code Online (Sandbox Code Playgroud)

不确定它是否会保留存储过程,因为它们在我工作的地方没有使用,但我会定期使用它来重置数据库.

-dmysqldump上的开关意味着"不要转储数据".

--add-drop-table预先设置成DROP TABLE语句的每一个垃圾堆CREATE TABLE.


pax*_*blo 12

我不这么认为(但我以前错了).我倾向于做的是这些案件分为两个步骤.

如果您的DBMS具有命令行界面,您可以使用它来创建脚本来完成大部分工作,例如:

db2 "select 'db2 delete from ' | tblname from sysibm.systables
    where owner = 'pax'" >p2.sh
p2.sh
Run Code Online (Sandbox Code Playgroud)

第一位只是创建一个p2.sh文件(或p2.cmdWindows下的文件),其中包含delete from每个拥有的表的语句pax.然后你只需运行该命令文件来完成脏工作.您当然可以先检查一下,当然:-)

不是您正在寻找的一步过程,但仍然非常简单.我在这里假设mysql也有一个命令行界面.

更新:

上面的MySQL版本看起来应该是:

echo "select 'mysql truncate table ' | table_name
              from information_schema.tables" | mysql >p2.sh
bash p2.sh
Run Code Online (Sandbox Code Playgroud)

这使用的truncate命令通常比delete from删除所有行更有效.它还使用正确的MySQL系统表来获取表名.

但有一点 - 您可能希望where在该选择上放置一个子句,以将表限制为您想要删除的表.现在的查询将尝试删除每个表.一种可能性是用特定table_schema和/或table_type值来限制它.


Mr.*_*ess 9

清除数据库中所有表的最强大的方法是由kostanos如何从命令行删除所有MySQL表而没有DROP数据库权限提交的

由于下面的代码清除了当前数据库中的所有表,因此您可能希望在继续之前选择其他数据库.

USE DATABASE_YOU_WANT_TO_CLEAR;
Run Code Online (Sandbox Code Playgroud)

片段后,即使存在外键约束,也会从表中删除数据.您可能还想在实际清理之前仔细检查表列表,以防您忘记选择正确的数据库.

-- save current foreign key settings and disable foreign key checks
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET GROUP_CONCAT_MAX_LEN=32768;  -- you never know how people name their tables
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables
  FROM information_schema.tables
  WHERE table_schema = (SELECT DATABASE());  -- operates on the current DB
SELECT IFNULL(@tables,'dummy') INTO @tables;  -- avoid error if there are no tables

-- At this point you might want to double check the list of tables
-- to be cleared.  Run SELECT @tables; to do so.

SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
Run Code Online (Sandbox Code Playgroud)


Tay*_*ese 7

这将需要一个循环遍历每个表的存储过程或脚本,并执行:

truncate table <tablename>

要获取要截断的表列表,您可以执行以下操作:

SELECT table_name 
FROM INFORMATION_SCHEMA.tables 
WHERE table_schema = 'db_name' 
Run Code Online (Sandbox Code Playgroud)


小智 7

在命令行中...

USE dbname

SET foreign_key_checks = 0;
TRUNCATE tablename;  //do this for each table you want emptied
SET foreign_key_checks = 1;
Run Code Online (Sandbox Code Playgroud)


Fra*_*ino 5

导出SQL脚本,删除数据库,然后针对该脚本重新创建数据库。:)