一次修理所有表格

如何一次检查数据库中的所有表?

而不是input查询check table ''tablename''; 所有的桌子一个接一个。

有没有像check all或类似的简单命令?

6 Solutions collect form web for “一次修理所有表格”

从命令行你可以使用:

 mysqlcheck -A --auto-repair 

http://dev.mysql.com/doc/refman/5.0/en/mysqlcheck.html

命令是这样的:

 mysqlcheck -u root -p --auto-repair --check --all-databases 

询问时必须提供密码,

或者你可以运行这个,但不build议这样做,因为密码是用明文写的:

 mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases 
 select concat('repair table ', table_name, ';') from information_schema.tables where table_schema='mydatabase'; 

对于'mydatabase'使用你的数据库名称。

以下命令在Windows中使用命令提示符(以pipe理员身份)工作:

 mysqlcheck -u root -p -A --auto-repair 

使用root用户运行mysqlcheck,提示input密码,检查所有数据库,并自动修复任何损坏的表。

没有默认的命令来做这件事,但你可以创build一个程序来完成这项工作。 它将遍历information_schema行并调用REPAIR TABLE 'tablename'; 为每一行。 CHECK TABLE目前还不支持预处理语句。 这里是例子(用您的数据库名称replaceMYDATABASE):

 CREATE DEFINER = 'root'@'localhost' PROCEDURE MYDATABASE.repair_all() BEGIN DECLARE endloop INT DEFAULT 0; DECLARE tableName char(100); DECLARE rCursor CURSOR FOR SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA`=DATABASE(); DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET endloop=1; OPEN rCursor; FETCH rCursor INTO tableName; WHILE endloop = 0 DO SET @sql = CONCAT("REPAIR TABLE `", tableName, "`"); PREPARE statement FROM @sql; EXECUTE statement; FETCH rCursor INTO tableName; END WHILE; CLOSE rCursor; END 

我喜欢这个从shell中进行简单的检查:

 mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE 'User%'" \ | awk 'NR != 1 {print "CHECK TABLE "$1";"}' \ | mysql -p<password> -D<database> 
  • 将UTF-8string经典ASP转换为SQL数据库
  • 当会话或请求不再存在时,停止(长时间)在PostgreSQL中运行SQL查询?
  • 使用JPA创build具有保留字名称的字段
  • 如何获得当年的第一个和最后一个date
  • 如何logging数据库
  • SQL在性能上不好?
  • 什么是存储过程?
  • 像SQL这样的Hive插入查询
  • MySQL - 多less列太多了?
  • CakePHP使用JOIN查找方法
  • 使用PostgreSQL在同一个查询中更新多行