1つのコマンドでMySQLデータベースのすべてのテーブルを切り捨てますか?


346

1回の操作でデータベース内のすべてのテーブルを切り捨てるクエリ(コマンド)はありますか?これを1つのクエリで実行できるかどうかを知りたいです。


1
すべてのテーブルを切り捨てますか?データベース内のすべてのテーブルのすべての列を切り捨てるつもりですか?これはどのクエリ言語ですか?(SQL、MySQL、Oracle、Postgresなど)
Jay

あなたが非常に簡単にトラブルに巻き込まれる可能性があるため、私はこれを行うことをお勧めしますかわかりません。切り捨てをスクリプト化してスクリプトを実行できない理由はありますか?
GrayWizardx 2009

おかげで4返答、しかしスクリプトを実行していない理由が短時間で実行されているので、mysqlでクエリを実行することを考えた
devang

mysqlのmysql..andクエリは、テーブルtable_name..hereをトランケートするのと同じようなことを意味します。ここでは、1つのクエリでdb内のすべてのテーブルのすべての行をトランケートしたい
devang

カーソルでInformation_Schemaを使用できます。MySqlについては不明ですが、Information_Schema.Tablesをサポートする必要があります
GrayWizardx

回答:


340

削除(テーブルを削除)

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

17
うん、きれい、ty。ただし、これを-uUSER -pPASSWORDで実行する必要がある場合があります。また、カスケードでFKを削除しない場合は、複数回実行する必要がある場合があります。
mihaicc 2012年

47
あなたは、このような「としてFKの問題が発生した場合:外部キー制約が失敗した削除することはできませんか、親行を更新:、次のようにコマンドを変更することで必ず無効に外部キーのチェックになる」mysql -e "SET FOREIGN_KEY_CHECKS = 0; drop table $table" DATABASE_NAME
イーサン・P.

24
ただし、mysqlクライアントをループする必要はありません。このようなループのそれを取るmysql -Nse 'show tables' DATABASE_NAME | while read table; do echo "drop table $table;"; done | mysql DATABASE_NAME
アレクサンダーShcheblikin

2
@TylerCollierには.my.cnfが必要
Felix Eve

2
上記の回答とコメントに基づいて、そしてそれらが私にとって期待どおりに機能しなかったので、これに使用できる簡単なbashスクリプトを作成しました。次の場所にあります:gist.github.com/mocanuga/eff26a3dcc40ef657a1c812f68511f6d
mocanuga

145

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;

1
これは、データベースのユーザーとパスワードがあり、シェルで目に見える形で入力したくない場合は、おそらく最良の解決策です。
バッハ、

5
このソリューションではDBアクセスのみが必要で、SSHアクセスは必要ないため、賛成です。さらに、OSに依存しません。
mastazi 2017年

@mastaziいくつか質問があります。1.「table_schema」とは何の略ですか。それはスキーマ名から立っていますか?2.TABLE_NAMEは何を表していますか?削除する必要があるテーブルを表しますか?3.「( 'db1_name'、 'db2_name')」のようなコマンドで削除する必要のあるテーブルを長く書く必要がありますか?
AAEM、

@Ahmedで必要な唯一の置換は、db1_nameとdb2_nameをデータベースの名前に置き換える必要があることです。次に、このクエリの結果をコピーし、新しいmysqlクエリとして貼り付けて実行する必要があります。INFORMATION_SCHEMAは、すべてのMySQLインストールにプレインストールされている組み込みスキーマであり、データベースに関する情報を保持します。変更しないと、MySQLが誤動作を開始します:-) table_schemaおよびtable_nameは、「TABLES」 information_schema
mastazi

「db_name」とは、スキーマの名前ですか?テーブルのデータを削除したいスキーマが1つしかない
AAEM

66

次のようにphpMyAdminを使用します。

データベースビュー=>すべてチェック(テーブル)=>空

外部キーのチェックを無視したい場合は、次のボックスのチェックを外してください:

[]外部キーチェックを有効にする

このチェックボックスを取得するには、少なくともバージョン4.5.0以降を実行している必要があります。

MySQL CLI-fuではありませんが、動作します。


31
PHPを実行していると誰が言ったのですか...?
jsh 2013年

37
私たちがしなかったと誰が言ったのですか?この答えは明らかに人々に役立つことがわかりました。助けになる。
bzeaman 2015

2
親子データベーススキーマがある場合、これは機能しません。
Cary Bondoc 2016年

2
外部キー制約は失敗します。
Brian Hannay 2017

2
@BrianHannay 2015年6月にPMA 4.5.0で追加されました。変更 ログ元の問題
Nemo

24

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に追加すると、たとえばmysqlワークベンチ内から簡単に使用できるようになります。

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

dに関するhi..thanksは..私はこのクエリが、doesntのを試してみました私は私のDB内のすべてのテーブルのために使用することができます切り捨てテーブルtable_nameのようなものDER work..isに思える返信
devang

MySQLが「+」演算子を直接サポートしていないことを忘れていました。これがエラーであると想定して、上記のCONCAT()の例を追加しました。それでもエラーメッセージが表示される場合は、実際のエラーメッセージを共有してください。
ビーチの

このクエリは機能しますが、たとえばdevang..isが私のdb名である場合、上記のクエリに従ってそれを使用すると、次のエラーがスローされます。テーブル 'devang.TABLES'は存在しません
devang

3
ああ。INFORMATION_SCHEMAは、アクティブなデータベースに存在するビューです。データベースを変更すると、そのDBに対してビューが実行されます。データベースを変更するときにクエリを変更する必要はありません。次の手順に従ってください:1)アクティブなデータベースを変更します。2)スクリプトを実行します。3)結果をコピーする4)結果をエディターに貼り付ける5)結果を実行する アクティブデータベース内のすべてのテーブルが切り捨てられました。
ビーチ

1
注意してください!これにより、すべてのデータベースのすべてのテーブルが選択されます(現在のデータベースにないテーブルも含まれます。MySQLの例は機能しませんが、私の場合、66行ではなく293行(テーブル)が返されました。データ損失を想像してみてください
f4der 2014年

19

私はこれがデータベースのすべてのテーブルを削除することを発見しました:

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

ホスティングソリューションに制限されている場合(データベース全体を削除できない場合)に役立ちます。

テーブルを切り捨てるように変更しました。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

私のために働く-編集、最後のコマンドのタイプミスを修正


15
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;

あなたは、現在のデータベースで動作するようにしたい場合には、変更最後の条件(したがって、このコードポータブルを作る)SELECTこれに:AND table_schema = DATABASE();
ALX

私にとってそれは切り捨てられません。MySQL 5.7.25
Lucas Bustamante

14

以下のコードのようにするだけで、テーブル名を自分の名前に置き換えるのが最も簡単だと思いました。 重要なのは、最終行が常に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
SET FOREIGN_KEY_CHECKS = 0を繰り返す必要はありません。モードを0としてマークする開始行のすべてのTRUNCATEコマンドの後
HMagdy

12

これにより、すべてのテーブルを切り捨てるコマンドが出力されます。

SELECT GROUP_CONCAT(Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME) SEPARATOR ';') FROM INFORMATION_SCHEMA.TABLES where table_schema in ('my_db');

5
  1. テーブルを切り捨てるには、このテーブルの列にマップされた外部キー制約を他のテーブルから削除する必要があります(実際には、特定のDB /スキーマのすべてのテーブルで)。
  2. したがって、最初にすべての外部キー制約を削除してから、テーブルを切り捨てる必要があります。
  3. オプションで、最適化テーブル(mysqlでは、innodb engine esp)を使用して、データの切り捨て後、使用されたデータ領域/サイズをOSに回収します。
  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 /スキーマを削除して再作成する必要はありません

欠点。1)FK制約は、制約名に「FK」を含む名前のテーブル内の名前である必要があります。


3

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]

dev.mysqlのmysqldump使用ガイド


3

これを使用してクエリを作成します

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内のすべてのテーブルが切り捨てられます。


データベース名はqoutesにある必要があります
Roman M


2

これが、 'em all'を切り捨てる1つのステートメントを持つ私の変種です。

まず、ヘルパーストアドプロシージャに「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');

これはちょうど1つのステートメントになりました:-)


2

ここで私はここで知っています

   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']);

    }
?>

詳細はこちらリンクをチェック


1

次に、ローカルデータベースのすべてのテーブルを切り捨てる手順を示します。

動作しない場合はお知らせください。この回答は削除します。

未テスト

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;

なぜこれが機能しないのかを理解するのに多くの時間を費やしました。次に、この電子メールスレッドへのコメントが役立ちました:forums.mysql.com/read.php?61,116597,219343#msg - 219343-参照用:「残念ながら、カーソルでprepareステートメントを使用できないようです。マニュアルから:dev.mysql.com/doc/refman/6.0/en/…
Tominator

1

NOCHECK CONSTRAINT ALLを実行した後でも、TRUNCATE TABLE ..が外部キー制約に問題があるため、代わりにDELETE FROMステートメントを使用しています。これは、IDシードがリセットされないことを意味します。これを行うには、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'''

0

確かではありませんが、データベースのスキーマを新しいデータベースにコピーできるコマンドが1つあると思います。これを実行したら、古いデータベースを削除し、その後、データベーススキーマを古い名前に再度コピーできます。


1
mysqldump -uuser -ppassword --no-data salesLeadsBrittany> salesLeadsT​​emplate.sqlこれにより、スキーマのみ(データなし)でSQLファイルが作成されます。このコマンドの後でデータベースを削除し、スキーマをインポートしてデータベースを再作成できます。
GJ。

0

これは1つのコマンドではないことはわかっていますが、phpMyAdmin内から次の手順を実行することで、目的の結果を得ることができます。

  1. 削除する(すべての)テーブルを選択(すべてをチェック)
  2. 「選択済み:」リストから「ドロップ」/「切り捨て」を選択します
  3. 確認ページ(「本当に実行しますか?」)で、クエリをコピーします(背景が赤のすべてのもの)。
  4. 上部に移動してSQLをクリックし、「SET FOREIGN_KEY_CHECKS = 0;」と書き込みます。次に、以前にコピーしたクエリを貼り付けます
  5. 「Go」をクリックします

アイデアは、データベースからすべてのテーブルをすばやく取得することです(5秒と2クリックで実行します)が、最初に外部キーチェックを無効にします。CLIもデータベースを削除して再度追加する必要もありません。


0
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

-

デビッド、

コードのフォーマットに時間を割いていただきありがとうございますが、これがコードの適用方法です。

-カート

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. authorization_external_systemは、approval_requestに依存しています
  2. 住所はお客様によって異なります
  3. customer_identificationは顧客に依存します
  4. external_idは顧客に依存
  5. 資格は顧客に依存します
  6. email_addressはお客様によって異なります
  7. authorization_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. テーブルapproval_external_systemの切り捨て
  3. テーブルapproval_requestの切り捨て
  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

次の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
mysqldump -u root -p --no-data dbname > schema.sql
mysqldump -u root -p drop dbname
mysqldump -u root -p < schema.sql

0

ソルン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;

ソルン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

1
これは最初のテーブルTRUNCATE table1を返すだけで、他のすべてのテーブルについては忘れます。
スティーブンスミス

この解決策は間違いなく非常識です。なぜ投票できなかったのか分かりません。編集した私の間違いのせいかもしれません。
アンジェリンナダー14

0

これでうまくいきました。データベース、ユーザー名、パスワードを適宜変更してください。

mysql -Nse 'show tables' -D DATABASE -uUSER -pPWD | while read table; do echo "SET FOREIGN_KEY_CHECKS = 0;drop table \`$table\`;SET FOREIGN_KEY_CHECKS = 1;"; done | mysql DATABASE -uUSER -pPWD


-1

テーブルを単にドロップして再作成するというアイデアでしょうか?

編集:

@ジョナサンレフラー:真

その他の提案(またはすべてのテーブルを切り捨てる必要がない場合):

特定のテーブルを切り捨てるための基本的なストアドプロシージャを作成しないのはなぜですか

CREATE PROCEDURE [dbo].[proc_TruncateTables]
AS
TRUNCATE TABLE Table1
TRUNCATE TABLE Table2
TRUNCATE TABLE Table3
GO

これにより、テーブルのすべての制約、権限、ビューなどが失われます-これはかなり厄介です。
ジョナサンレフラー、

削除を行ってから、切り捨てる代わりにすべてのテーブルを再シードできます。値下げはフラストレーションの外だと思います。バックアップを復元するだけです。
マークレッドマン

-5
<?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情報とTABLE_NAMEを変更するだけです。


ジェームス、私はOPが最初に1つのライナーを探していると思います。次に、すべてのテーブルを一度取得して削除するコマンドを探します。これには、何らかのユーザー介入が必要です。投稿ありがとう
クレイグウェイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.