Обрезать все таблицы в базе данных MySQL одной командой? - PullRequest
316 голосов
/ 16 декабря 2009

Существует ли запрос (команда) для усечения всех таблиц в базе данных за одну операцию? Я хочу знать, смогу ли я сделать это с помощью одного запроса.

Ответы [ 24 ]

0 голосов
/ 26 июня 2014
mysqldump -u root -p --no-data dbname > schema.sql
mysqldump -u root -p drop dbname
mysqldump -u root -p < schema.sql
0 голосов
/ 06 июня 2014

Следующий запрос MySQL сам по себе выдаст один запрос, который будет обрезать все таблицы в данной базе данных. Обходит ИНОСТРАННЫЕ ключи:

SELECT CONCAT(
         'SET FOREIGN_KEY_CHECKS=0; ',
         GROUP_CONCAT(dropTableSql SEPARATOR '; '), '; ',
         'SET FOREIGN_KEY_CHECKS=1;'
       ) as dropAllTablesSql
FROM   ( SELECT  Concat('TRUNCATE TABLE ', table_schema, '.', TABLE_NAME) AS dropTableSql
         FROM    INFORMATION_SCHEMA.TABLES
         WHERE   table_schema = 'DATABASE_NAME' ) as queries
0 голосов
/ 17 октября 2013
TB=$( mysql -Bse "show tables from DATABASE" );
for i in ${TB};
    do echo "Truncating table ${i}";
    mysql -e "set foreign_key_checks=0; set unique_checks=0;truncate table DATABASE.${i}; set foreign_key_checks=1; set unique_checks=1";
    sleep 1;
done

-

David

Спасибо, что нашли время для форматирования кода, но это то, как он должен применяться.

-Kurt

В системе UNIX или Linux:

Убедитесь, что вы находитесь в оболочке bash. Эти команды должны запускаться из командной строки следующим образом.

Примечание:

Я храню свои учетные данные в моем файле ~ / .my.cnf, поэтому мне не нужно указывать их в командной строке.

Примечание:

cpm - это имя базы данных

Я показываю только небольшую выборку результатов из каждой команды.

Найдите ограничения внешнего ключа:

klarsen@Chaos:~$ mysql -Bse "select concat(table_name, ' depends on ', referenced_table_name)
             from information_schema.referential_constraints
             where constraint_schema = 'cpm'
             order by referenced_table_name"
  1. утверждение_экстернальной_системы зависит от утверждения_реквеста
  2. адрес зависит от клиента
  3. customer_identification зависит от клиента
  4. external_id зависит от клиента
  5. учетные данные зависят от клиента
  6. адрес электронной почты зависит от клиента
  7. утверждение_запроса зависит от клиента
  8. customer_status зависит от клиента
  9. customer_image зависит от клиента

Список таблиц и количество строк:

klarsen@Chaos:~$ mysql -Bse "SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'cpm'" | cat -n

 1  address 297
 2  approval_external_system    0
 3  approval_request    0
 4  country 189
 5  credential  468
 6  customer    6776
 7  customer_identification 5631
 8  customer_image  2
 9  customer_status 13639

Сократите ваши таблицы:

klarsen@Chaos:~$ TB=$( mysql -Bse "show tables from cpm" ); for i in ${TB}; do echo "Truncating table ${i}"; mysql -e "set foreign_key_checks=0; set unique_checks=0;truncate table cpm.${i}; set foreign_key_checks=1; set unique_checks=1"; sleep 1; done
  1. Адрес усеченной таблицы
  2. Усеченная таблица утверждение_экстерьер_система
  3. Усеченный стол утверждение_запрос
  4. Усеченный стол страна
  5. Учетные данные усеченной таблицы
  6. Усеченный стол покупателя
  7. Усеченный стол customer_identification
  8. Усеченный стол customer_image
  9. Усеченный стол customer_status

Убедитесь, что это сработало:

klarsen@Chaos:~$ mysql -Bse "SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'cpm'" | cat -n

 1  address 0
 2  approval_external_system    0
 3  approval_request    0
 4  country 0
 5  credential  0
 6  customer    0
 7  customer_identification 0
 8  customer_image  0
 9  customer_status 0
10  email_address   0

В окне Windows:

Примечание:

cpm - это имя базы данных

C:\>for /F "tokens=*" %a IN ('mysql -Bse "show tables" cpm') do mysql -e "set foreign_key_checks=0; set unique_checks=0; truncate table %a; foreign_key_checks=1; set unique_checks=1" cpm
0 голосов
/ 19 марта 2013

Солнц 1)

mysql> select group_concat('truncate',' ',table_name,';') from information_schema.tables where table_schema="db_name" into outfile '/tmp/a.txt';
mysql> /tmp/a.txt;

Soln 2)

- Export only structure of a db
- drop the database
- import the .sql of structure 

- редактировать ----

earlier in solution 1, i had mentioned concat() instead of group_concat() which would have not returned the desired result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...