Nie ma domyślnego polecenia, aby to zrobić, ale można utworzyć procedurę wykonywania pracy. To będzie iterować przez wiersze information_schema
i wywołać REPAIR TABLE 'tablename';
dla każdego wiersza. CHECK TABLE
nie jest jeszcze obsługiwany dla przygotowanych wyciągów. Oto przykład (zastąpić MyDatabase z nazwą bazy danych):
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
Um, to tak naprawdę nie naprawia stołów. Po prostu wypisuje ciąg "tabela napraw nazwa_tabeli" dla każdej tabeli. – naught101
Ale działa dobrze! Właśnie skopiowałem wynik i wykonałem go jako zapytanie sql. – Redax
To uratowało mnie ponad godzinę. – redolent