Усечение всех таблиц в базе данных MySQL [duplicate]

Если вы выполняете единичный тест, вы можете скомпилировать свой файл со следующим флагом

-Dprivate=public

. Затем в вашем модульном тесте вы сможете вызывать все частные методы вашего класса.

EDIT:

Недавно я заметил, что использование флага -fno-access-control в gcc-компиляторе позволяет вам получить доступ к частному методу или члену. Более подробную информацию по этой теме можно найти здесь: Тестирование модуля с помощью -fno-access-control

288
задан Jonathan Leffler 16 December 2009 в 08:31
поделиться

24 ответа

Soln 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
0
ответ дан Angelin Nadar 19 August 2018 в 08:09
поделиться
  • 1
    Кажется, это возвращает только первую таблицу: TRUNCATE table1 и забывает обо всех других таблицах. – Stephen Smith 4 July 2014 в 19:54
  • 2
    да. u нужно использовать group_concat – Angelin Nadar 5 July 2014 в 09:28
  • 3
    Это решение было бы безумным. Я не знаю, почему он не получил голоса. может быть из-за моей ошибки, которая была отредактирована. – Angelin Nadar 5 July 2014 в 09:32
  • 4
    +1 @Stephen для указания – Angelin Nadar 5 July 2014 в 09:36

Вот процедура, которая должна усекать все таблицы в локальной базе данных.

Дайте мне знать, если это не сработает, и я удалю этот ответ.

Untested

CREATE PROCEDURE truncate_all_tables()
BEGIN

   -- Declare local variables
   DECLARE done BOOLEAN DEFAULT 0;
   DECLARE cmd VARCHAR(2000);

   -- Declare the cursor
   DECLARE cmds CURSOR
   FOR
   SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES;

   -- Declare continue handler
   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;

   -- Open the cursor
   OPEN cmds;

   -- Loop through all rows
   REPEAT

      -- Get order number
      FETCH cmds INTO cmd;

      -- Execute the command
      PREPARE stmt FROM cmd;
      EXECUTE stmt;
      DROP PREPARE stmt;

   -- End of loop
   UNTIL done END REPEAT;

   -- Close the cursor
   CLOSE cmds;

END;
0
ответ дан beach 19 August 2018 в 08:09
поделиться

Вот мой вариант, чтобы иметь «один оператор для усечения» всех.

Во-первых, я использую отдельную базу данных с именем «util» для моих вспомогательных хранимых процедур. Код моей хранимой процедуры для обрезания всех таблиц:

DROP PROCEDURE IF EXISTS trunctables;
DELIMITER ;;
CREATE  PROCEDURE trunctables(theDb varchar(64))
BEGIN
    declare tname varchar(64);
    declare tcursor CURSOR FOR 
    SELECT table_name FROM information_schema.tables WHERE table_type <> 'VIEW' AND table_schema = theDb;
    SET FOREIGN_KEY_CHECKS = 0; 
    OPEN tcursor;
    l1: LOOP
        FETCH tcursor INTO tname;
        if tname = NULL then leave l1; end if;
        set @sql = CONCAT('truncate `', theDB, '`.`', tname, '`');
        PREPARE stmt from @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END LOOP l1;
    CLOSE tcursor;
    SET FOREIGN_KEY_CHECKS = 1; 
END ;;
DELIMITER ;

Как только у вас есть эта хранимая процедура в вашей базе данных util, вы можете называть ее как

call util.trunctables('nameofdatabase');

, которая теперь точно одно утверждение: -)

0
ответ дан bebbo 19 August 2018 в 08:09
поделиться

Мне было проще всего просто сделать что-то вроде кода ниже, просто замените имена таблиц своими. important убедитесь, что последняя строка всегда установлена ​​SET FOREIGN_KEY_CHECKS = 1;

SET FOREIGN_KEY_CHECKS=0;
TRUNCATE `table1`;
TRUNCATE `table2`;
TRUNCATE `table3`;
TRUNCATE `table4`;
TRUNCATE `table5`;
TRUNCATE `table6`;
TRUNCATE `table7`;
SET FOREIGN_KEY_CHECKS=1;
7
ответ дан Bimal Poudel 19 August 2018 в 08:09
поделиться
  • 1
    вам не нужно повторять SET FOREIGN_KEY_CHECKS = 0; после каждой команды TRUNCATE только в начале строки, которая будет отмечать режим как 0 – HMagdy 12 January 2015 в 13:24

Нет. Нет единой команды для обрезания всех таблиц mysql сразу. Вам нужно будет создать небольшой скрипт для обрезания таблиц один за другим.

ref: http://dev.mysql.com/doc/refman/5.0/ru/truncate-table. HTML

2
ответ дан Bjørn T. 19 August 2018 в 08:09
поделиться

Я обнаружил, что TRUNCATE TABLE .. имеет проблемы с ограничениями внешнего ключа, даже после NOCHECK CONSTRAINT ALL, поэтому вместо этого я использую оператор DELETE FROM. Это означает, что семена идентичности не сбрасываются, вы всегда можете добавить DBCC CHECKIDENT для достижения этого.

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

EXEC sp_MSforeachtable 'PRINT ''ALTER TABLE ? NOCHECK CONSTRAINT ALL'''
EXEC sp_MSforeachtable 'print ''DELETE FROM ?'''
EXEC sp_MSforeachtable 'print ''ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'''
1
ответ дан cedd 19 August 2018 в 08:09
поделиться

обрезать несколько таблиц базы данных на экземпляре Mysql

SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') 
FROM INFORMATION_SCHEMA.TABLES where  table_schema in ('db1_name','db2_name');

Использовать результат запроса для обрезания таблиц

Примечание: возможно, вы получите эту ошибку:

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

Это происходит, если есть таблицы с внешними ключами, ссылающиеся на таблицу, которую вы пытаетесь удалить / усечь.

Перед усечением таблиц Все, что вам нужно сделать, это:

SET FOREIGN_KEY_CHECKS=0;

Усекайте свои таблицы и измените их на

SET FOREIGN_KEY_CHECKS=1;
117
ответ дан Dark Falcon 19 August 2018 в 08:09
поделиться
  • 1
    синтаксическая ошибка возле неожиданного токена `(' – pal4life 19 September 2013 в 20:41
  • 2
    @ pal4life: вы скопировали неверную строку! – dotancohen 23 February 2014 в 18:14
  • 3
    Это, пожалуй, лучшее решение, если у вас есть пользователь и пароль для вашей базы данных, и вы не хотите набирать их явно в своей оболочке. – Bach 31 March 2016 в 10:40
  • 4
    Активировано, потому что для этого решения требуется только доступ к БД, а не доступ к SSH. Кроме того, он не зависит от ОС. – mastazi 29 March 2017 в 23:43
  • 5
    @mastazi У меня есть несколько вопросов: 1. что такое «table_schema»? стоит ли оно от имени схемы? 2.Что стоит TABLE_NAME? стоит ли за столы, которые нужно удалить? 3. Должен ли я писать высокие таблицы, которые должны быть удалены с помощью команды «& quot;» («db1_name», «db2_name») & quot ;? – Ahmed 17 August 2018 в 12:17

Я нашел это, чтобы удалить все таблицы в базе данных:

mysqldump -uUSERNAME -pPASSWORD --add-drop-table --no-data DATABASENAME | grep ^DROP | mysql -uUSERNAME -pPASSWORD DATABASENAME

Полезно, если вы ограничены решением для хостинга (не можете удалить всю базу данных).

I изменил его, чтобы обрезать таблицы. Для mysqldump нет «-add-truncate-table», поэтому я сделал:

mysqldump -uUSERNAME -pPASSWORD --add-drop-table --no-data DATABASENAME | grep ^DROP | sed -e 's/DROP TABLE IF EXISTS/TRUNCATE TABLE/g' | mysql -uUSERNAME -pPASSWORD DATABASENAME

работает для меня --edit, исправление опечатки в последней команде

16
ответ дан David Kartik 19 August 2018 в 08:09
поделиться
  • 1
    Мне очень нравится это решение, не нужно использовать циклы в bash! – pedromanoel 3 April 2014 в 14:59

, если используется SQL Server 2005, существует скрытая хранимая процедура, которая позволяет вам выполнить команду или набор команд для всех таблиц внутри базы данных. Вот как вы могли бы называть TRUNCATE TABLE этой хранимой процедурой:

EXEC [sp_MSforeachtable] @command1="TRUNCATE TABLE ?"

Здесь - хорошая статья, которая развивается дальше.

Для MySql, однако вы можете использовать mysqldump и указать опции --add-drop-tables и --no-data для удаления и создания всех таблиц, игнорирующих данные. например:

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE]

руководство по использованию mysqldump от dev.mysql

3
ответ дан Dostee 19 August 2018 в 08:09
поделиться
mysqldump -u root -p --no-data dbname > schema.sql
mysqldump -u root -p drop dbname
mysqldump -u root -p < schema.sql
0
ответ дан emanuele 19 August 2018 в 08:09
поделиться
<?php
// connect to database
$conn=mysqli_connect("localhost","user","password","database");

// check connection
if (mysqli_connect_errno()) {
  exit('Connect failed: '. mysqli_connect_error());
}

// sql query
$sql =mysqli_query($conn,"TRUNCATE " . TABLE_NAME);


// Print message
if ($sql === TRUE) {
  echo 'data delete successfully';
}
else {
 echo 'Error: '. $conn->error;
}

$conn->close();

?>

Вот фрагмент кода, который я использую для очистки таблицы. Просто измените $ conn info и TABLE_NAME.

-6
ответ дан emmanuel 19 August 2018 в 08:09
поделиться
  • 1
    hey james, я думаю, что OP ищет, во-первых, один лайнер ... и, во-вторых, команду, чтобы вывести все таблицы и удалить их. это требует какого-то вмешательства пользователя. спасибо за сообщение, хотя – Craig Wayne 6 May 2016 в 06:03
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. утверждение_external_system зависит от адреса утверждения_request
  2. зависит от клиента
  3. customer_identification зависит от клиента
  4. external_id зависит от клиента
  5. учетные данные зависят от клиента
  6. email_address зависит от клиента
  7. утверждение_request зависит от клиента
  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. Усечение таблицы утверждение_external_system
  3. Усечение ta
  4. Усечение таблицы [
  5. Усекающий стол клиент
  6. Усечение таблицы customer_identification
  7. Усечение table customer_image
  8. Усеченная таблица 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
ответ дан fthiella 19 August 2018 в 08:09
поделиться

Это приведет к печати команды для усечения всех таблиц:

SELECT GROUP_CONCAT(Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME) SEPARATOR ';') FROM INFORMATION_SCHEMA.TABLES where table_schema in ('my_db');
10
ответ дан Gaurav Gupta 19 August 2018 в 08:09
поделиться
SET FOREIGN_KEY_CHECKS = 0;

SELECT @str := CONCAT('TRUNCATE TABLE ', table_schema, '.', table_name, ';')
FROM   information_schema.tables
WHERE  table_type   = 'BASE TABLE'
  AND  table_schema IN ('db1_name','db2_name');

PREPARE stmt FROM @str;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

SET FOREIGN_KEY_CHECKS = 1;
6
ответ дан George Moik 19 August 2018 в 08:09
поделиться

Я не уверен, но я думаю, что есть одна команда, в которой вы можете скопировать схему базы данных в новую базу данных, как только вы это сделаете, вы можете удалить старую базу данных, после чего вы можете снова скопировать схему базы данных в старое имя.

0
ответ дан GJ. 19 August 2018 в 08:09
поделиться
  • 1
    mysqldump -uuser -ppassword -no-data salesLeadsBrittany & gt; salesLeadsTemplate.sql Это создаст sql-файл только с помощью схемы (без данных). Вы можете удалить базу данных после этой команды и можете воссоздать базу данных, импортировав схему. – GJ. 16 December 2009 в 08:39

здесь, где я знаю здесь

   SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') 
    FROM INFORMATION_SCHEMA.TABLES where  table_schema in ('databasename1','databasename2');

Если не удается удалить или обновить родительскую строку: ограничение внешнего ключа не работает

Это происходит, если есть таблицы с внешними ключами, ссылки на таблицу, которую вы пытаетесь удалить / усечь.

Перед усечением таблиц Все, что вам нужно сделать, это:

SET FOREIGN_KEY_CHECKS=0;

Усечь ваши таблицы и изменить их на

SET FOREIGN_KEY_CHECKS=1; 

пользователь этот код php
    $truncate = mysql_query("SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') as tables_query FROM INFORMATION_SCHEMA.TABLES where table_schema in ('databasename')");

    while($truncateRow=mysql_fetch_assoc($truncate)){

        mysql_query($truncateRow['tables_query']);

    }
?>

проверьте подробнее здесь link

2
ответ дан JD The Real Hero 19 August 2018 в 08:09
поделиться

Идея может состоять в том, чтобы просто сбросить и воссоздать таблицы?

EDIT:

@Jonathan Leffler: True

Другое предложение (или случай, который вы не делаете необходимо усечь ВСЕ таблицы):

Почему бы просто не создать базовую хранимую процедуру для обрезания определенных таблиц

CREATE PROCEDURE [dbo].[proc_TruncateTables]
AS
TRUNCATE TABLE Table1
TRUNCATE TABLE Table2
TRUNCATE TABLE Table3
GO
-1
ответ дан Mark Redman 19 August 2018 в 08:09
поделиться
  • 1
    Это теряет все ограничения, разрешения, представления и т. Д. На таблицах, что является значительной неприятностью. – Jonathan Leffler 16 December 2009 в 08:29
  • 2
    Вы можете сделать удаление, а затем переместить все таблицы вместо усечения. Я предполагаю, что отметка ниже из-за разочарования. Просто восстановите резервную копию. – Mark Redman 29 February 2012 в 21:04

Падение (т. е. удаление таблиц)

mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "drop table $table" DATABASE_NAME; done

Усечение (т. е. пустые таблицы)

mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "truncate table $table" DATABASE_NAME; done
295
ответ дан Mathias Bynens 19 August 2018 в 08:09
поделиться
  • 1
    Это, безусловно, самое элегантное решение. – hobodave 29 February 2012 в 18:39
  • 2
    Да, чистая, ти. Но вам может понадобиться запустить это с помощью -uUSER -pPASSWORD. Также вам придется запускать его несколько раз, если у вас есть FK с удалением по каскаду. – mihaicc 4 October 2012 в 15:53
  • 3
    Если вы столкнулись с проблемами FK, такими как « Не удается удалить или обновить родительскую строку: ограничение внешнего ключа завершено », обязательно отключите проверки внешнего ключа, изменив команду следующим образом: mysql -e "SET FOREIGN_KEY_CHECKS = 0; drop table $table" DATABASE_NAME – Ethan P. 25 January 2013 в 20:00
  • 4
    Вы должны указать имя таблицы: ... & quot; truncate table \ `$ table \` & quot; ... – Matt Humphrey 16 May 2013 в 15:40
  • 5
    Однако не нужно зацикливать клиент mysql. Выньте его из цикла следующим образом: mysql -Nse 'show tables' DATABASE_NAME | while read table; do echo "drop table $table;"; done | mysql DATABASE_NAME – Alexander Shcheblikin 30 November 2013 в 00:04
  1. Чтобы усечь таблицу, нужно отбросить ограничения внешнего ключа, сопоставленные столбцам в этой таблице, из других таблиц (фактически, во всех таблицах в конкретном DB / Schema).
  2. Таким образом, все ограничения внешнего ключа должны быть сначала удалены, а затем усечение таблицы.
  3. Необязательно используйте таблицу оптимизации (в mysql, innodb engine esp) для восстановления используемого пространства данных / размер до ОС после усечения данных.
  4. Как только выполняется усечение данных, снова создайте те же ограничения внешнего ключа в той же таблице. Ниже приведен скрипт, который будет генерировать сценарий для выполнения вышеуказанных операций.
    SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,';') FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE CONSTRAINT_TYPE='FOREIGN KEY' AND TABLE_SCHEMA='<TABLE SCHEMA>'
    UNION
    SELECT CONCAT('TRUNCATE TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,';') FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA='<TABLE SCHEMA>' AND TABLE_TYPE='BASE TABLE'
    UNION
    SELECT CONCAT('OPTIMIZE TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,';') FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA='<TABLE SCHEMA>' AND TABLE_TYPE='BASE TABLE'
    UNION
    SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' ADD CONSTRAINT ',CONSTRAINT_NAME,' FOREIGN KEY(',COLUMN_NAME,')',' REFERENCES ',REFERENCED_TABLE_NAME,'(',REFERENCED_COLUMN_NAME,');') FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE CONSTRAINT_NAME LIKE 'FK%' AND TABLE_SCHEMA='<TABLE SCHEMA>'
    INTO OUTFILE "C:/DB Truncate.sql" LINES TERMINATED BY '\n';
    

Теперь запустите созданный скрипт Db Truncate.sql

. 1) Восстановить дисковое пространство 2) Не требуется, чтобы сбросить и воссоздать DB / Schema с той же структурой

Недостатки. 1) Ограничения FK должны быть именами в таблице с именем, содержащим «FK» в имени ограничения.

5
ответ дан mbinette 19 August 2018 в 08:09
поделиться

Используйте phpMyAdmin следующим образом:

Database View => Проверить все (таблицы) => Пусто

Если вы хотите игнорировать проверки внешнего ключа , вы можете снять флажок с надписью:

[] Включить проверку внешнего ключа

Вам нужно будет работать atleast версии 4.5.0 или выше чтобы получить этот флажок.

Его не MySQL CLI-fu, но эй, он работает!

58
ответ дан Nemo 19 August 2018 в 08:09
поделиться

Я знаю, что это не совсем одна команда, но желаемый результат может быть достигнут из phpMyAdmin, выполнив следующие шаги:

  1. Выделить (все) таблицы, которые нужно удалить (Проверить все)
  2. Выберите «Drop» / «Truncate» из списка «With selected:»
  3. На странице подтверждения («Вы действительно хотите:») скопируйте запрос (все с красный фон)
  4. Нажмите вверху и щелкните по SQL и напишите: «SET FOREIGN_KEY_CHECKS = 0;» затем вставьте ранее скопированный запрос
  5. Нажмите «Go»

Идея состоит в том, чтобы быстро получить все таблицы из базы данных (что вы делаете за 5 секунд и 2 клика ), но сначала отключите проверку внешнего ключа. Нет CLI и не отбрасывать базу данных и добавлять ее снова.

0
ответ дан Pavel Mocan 19 August 2018 в 08:09
поделиться

Следующий запрос MySQL сам будет вызывать один запрос, который усекает все таблицы в данной базе данных. Он обходит клавиши FOREIGN:

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
ответ дан Roel van Duijnhoven 19 August 2018 в 08:09
поделиться

MS SQL Server 2005+ (удалить PRINT для фактического выполнения ...)

EXEC sp_MSforeachtable 'PRINT ''TRUNCATE TABLE ?'''

Если ваша платформа базы данных поддерживает представления INFORMATION_SCHEMA, возьмите результаты следующего запроса и выполните их.

SELECT 'TRUNCATE TABLE ' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

Попробуйте это для MySQL:

SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES

Добавление точки с запятой в Concat упрощает использование, например изнутри workbench mysql.

SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES
22
ответ дан sanjay kashalkar 19 August 2018 в 08:09
поделиться
  • 1
    hi..thanks for d reply Я попробовал этот запрос, но, похоже, не работает. Это что-то вроде truncate table table_name, которое я могу использовать для всех таблиц в моем db .. – devang 16 December 2009 в 08:15
  • 2
    Я забыл, что MySQL не поддерживает & quot; + & quot; оператора. Предполагая, что это ошибка, я добавил пример CONCAT () выше. Если вы все еще получаете сообщение об ошибке, сообщите об этом фактическому сообщению об ошибке. – beach 16 December 2009 в 08:23
  • 3
    этот запрос работает, но что, если у меня есть имя diff db, например devang..is my db name, поэтому, если я использую его в соответствии с вашим предыдущим запросом, выдает ошибку foll. Таблица «devang.TABLES» не существует – devang 16 December 2009 в 08:40
  • 4
    Ааа. INFORMATION_SCHEMA - это представление, которое существует в активной базе данных. Если вы измените свою базу данных, представление будет выполнено в отношении этой БД. Нет необходимости изменять запрос при изменении баз данных. Просто выполните следующие действия: 1) измените активную базу данных. 2) запустите скрипт. 3) скопировать результаты 4) вставить результаты обратно в редактор 5) выполнить результаты. Все таблицы в активной базе данных теперь усечены. – beach 16 December 2009 в 08:51
  • 5
    спасибо за помощь – devang 16 December 2009 в 10:11

Используйте это и формируйте запрос

SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') 
FROM INFORMATION_SCHEMA.TABLES where  table_schema in (db1,db2)
INTO OUTFILE '/path/to/file.sql';

Теперь используйте этот метод, чтобы использовать этот запрос

mysql -u username -p </path/to/file.sql

, если вы получите ошибку, подобную этой

ERROR 1701 (42000) at line 3: Cannot truncate a table referenced in a foreign key constraint

самый простой способ - наверху вашего файла добавить эту строку

SET FOREIGN_KEY_CHECKS=0;

, в которой говорится, что мы не хотим проверять ограничения внешнего ключа во время прохождения этого файла.

Он усечет все таблицы в базах данных db1 и bd2.

3
ответ дан Vinod Kumar 19 August 2018 в 08:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: