하나의 명령으로 MySQL 데이터베이스의 모든 테이블을 자르시겠습니까?


347

한 번의 작업으로 데이터베이스의 모든 테이블을 잘라내는 쿼리 (명령)가 있습니까? 하나의 쿼리 로이 작업을 수행 할 수 있는지 알고 싶습니다.


1
모든 테이블을 자르시겠습니까? 데이터베이스에있는 모든 테이블의 모든 열을 잘라야합니까? 이 언어는 어떤 쿼리 언어입니까? (예 : SQL, MySQL, Oracle, Postgres 등)
Jay

당신이 쉽게 자신을 곤경에 빠뜨릴 수 있으므로 이것을하는 것이 좋습니다. 잘린 스크립트를 작성하고 스크립트를 실행할 수없는 이유가 있습니까?
GrayWizardx 2009

덕분에 4 응답하지만 이유는 그렇게 생각 시간의 짧은 실행 스크립팅하지 runnind 쿼리에서 MySQL의
devang

나중에 테이블 잘라 내기 유사의 mysql..and 쿼리 수단에 뭔가 내가 한 쿼리에서 내 DB에 모든 테이블의 모든 행을 절단 할 table_name..here
devang

커서와 함께 Information_Schema를 사용할 수 있습니다. MySql에 대해서는 확실하지 않지만 Information_Schema.Tables를 지원해야합니다.
GrayWizardx 2009

답변:


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
예, 깨끗 해요 그러나 -uUSER -pPASSWORD를 사용하여이를 실행해야 할 수도 있습니다. 또한 계단식에서 FK withou delete가 있으면 여러 번 실행해야 할 수도 있습니다.
mihaicc

47
" 부모 행을 삭제하거나 업데이트 할 수 없음 : 외래 키 제약 조건 실패 " 와 같은 FK 문제 가 발생하면 다음과 같이 명령을 수정하여 외래 키 검사를 비활성화하십시오.mysql -e "SET FOREIGN_KEY_CHECKS = 0; drop table $table" DATABASE_NAME
Ethan 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
데이터베이스에 대한 사용자 및 비밀번호가 있고 쉘에 시각적으로 입력하지 않으려는 경우 이것이 최상의 솔루션 일 것입니다.
Bach

5
이 솔루션에는 SSH 액세스가 아닌 DB 액세스 만 필요하기 때문에 승인되었습니다. 또한 OS 독립적입니다.
mastazi

@mastazi 몇 가지 질문이 있습니다. 1. "table_schema"는 무엇을 의미합니까? 스키마 이름에서 나온 것입니까? 2. TABLE_NAME의 의미는 무엇입니까? 테이블을 삭제해야합니까? 3. "( 'db1_name', 'db2_name')"과 같은 명령으로 삭제해야하는 테이블을 키로 작성해야합니까?
AAEM

@Ahmed 필요한 유일한 대체는 db1_name 및 db2_name을 데이터베이스 이름으로 바꿔야한다는 것입니다. 그런 다음이 쿼리의 결과를 복사하여 새 mysql 쿼리로 붙여넣고 실행해야합니다. INFORMATION_SCHEMA는 모든 MySQL 설치에 사전 설치되어 제공되는 내장 스키마이며 데이터베이스에 대한 정보를 보유하고 있습니다. 데이터베이스를 건드리지 마십시오. 그렇지 않으면 MySQL이 오작동을 시작합니다. information_schema
mastazi

"db_name"은 스키마의 이름을 의미합니까? 테이블 데이터를 삭제하려는 스키마는 1 개뿐입니다
AAEM

67

이 방법으로 phpMyAdmin을 사용하십시오 :

데이터베이스보기 => 모두 확인 (테이블) => 비어 있음

외래 키 검사를 무시하려면 다음과 같은 상자를 선택 취소하십시오.

[] 외래 키 검사 활성화

이 확인란을 사용하려면 최소 버전 4.5.0 이상을 실행해야합니다.

MySQL CLI-fu는 아니지만 작동합니다!


31
누가 우리가 PHP를 실행한다고 했습니까?
jsh

37
누가 안 했어? 이 답변은 분명히 사람들에게 유용합니다. 도움이됩니다.
bzeaman

2
부모-자식 데이터베이스 스키마가있는 경우 작동하지 않습니다.
Cary Bondoc

2
외래 키 제약 조건이 실패합니다.
Brian Hannay

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은 .. 내가이 쿼리하지만 나던 시도 난 내 DB의 모든 테이블에 사용할 수있는 잘라 내기 table_name 테이블 같은 데르 work..is에 보이는 응답
devang

MySQL이 "+"연산자를 직접 지원하지 않는 것을 잊었습니다. 그것이 오류라고 가정하면 위의 CONCAT () 예제를 추가했습니다. 여전히 오류 메시지가 표시되면 실제 오류 메시지를 공유하십시오.
beach

이 쿼리 작동하지만 난은 diff DB 이름이있는 경우 예를 들어 devang..is 내 DB 이름 난 당신의 위의 쿼리가 FOLL 오류 발생에 따라 사용할 그렇다면 ... 테이블 'devang.TABLES은'존재하지 않는
devang

3
아 INFORMATION_SCHEMA는 활성 데이터베이스에 존재하는보기입니다. 데이터베이스를 변경하면 해당 DB에 대해보기가 실행됩니다. 데이터베이스를 변경할 때 쿼리를 수정할 필요가 없습니다. 다음 단계를 따르십시오. 1) 활성 데이터베이스를 변경하십시오. 2) 스크립트를 실행하십시오. 3) 결과를 복사합니다. 4) 결과를 편집기에 다시 붙여 넣습니다. 5) 결과를 실행합니다. 활성 데이터베이스의 모든 테이블이 잘립니다.
beach

1
조심해! 이렇게하면 모든 데이터베이스의 모든 테이블 (현재 데이터베이스에없는 테이블도 포함)이 선택됩니다. MySQL 예제는 작동하지 않지만 제 경우에는 66 대신 293 행 (테이블)을 반환했습니다. 데이터 손실을 상상해보십시오 ...
f4der

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을 반복 할 필요는 없습니다. 모든 TRUNCATE 명령 후 시작 라인에서 모드를 0으로 표시합니다.
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 엔진 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의 모든 테이블을 자릅니다.


db 이름은 qoutes에 있어야합니다
Roman M


2

다음은 'em all'을 잘라내는 하나의 문장을 갖는 변형입니다.

먼저 도우미 저장 프로 시저에 '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');

이것은 정확히 하나의 진술입니다 :-)


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- 참조 용 "문은 커서에 사용할 수없는 준비와 같은 불행하게도, 그것은 보인다 설명서에서 :. 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
mysqldump -uuser -ppassword --no-data salesLeadsBrittany> salesLeadsTemplate.sql 이렇게하면 스키마 만있는 SQL 파일이 생성됩니다 (데이터 없음). 이 명령 후에 데이터베이스를 삭제하고 스키마를 가져 와서 데이터베이스를 다시 작성할 수 있습니다.
GJ.

0

나는 이것이 정확히 하나의 명령이 아니라는 것을 알고 있지만 다음 단계에 따라 phpMyAdmin 내에서 원하는 결과를 얻을 수 있습니다.

  1. 제거 할 테이블을 모두 선택하십시오 (모두 확인).
  2. "선택한 항목 :"목록에서 "삭제"/ "잘라 내기"를 선택하십시오.
  3. 확인 페이지 ( "정말 원하십니까?")에서 쿼리를 복사하십시오 (빨간색 배경의 모든 것)
  4. 상단으로 이동하여 SQL을 클릭하고 "SET FOREIGN_KEY_CHECKS = 0;"을 작성하십시오. 그런 다음 이전에 복사 한 쿼리를 붙여 넣습니다.
  5. "이동"을 클릭하십시오

아이디어는 데이터베이스에서 모든 테이블을 신속하게 가져 오는 것입니다 (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. Approval_external_system은 Approval_request에 의존합니다
  2. 주소는 고객에 따라 다릅니다
  3. customer_identification은 고객에 따라 다릅니다
  4. external_id는 고객에 따라 다릅니다
  5. 자격 증명은 고객에 따라 다릅니다
  6. email_address는 고객에 따라 다릅니다
  7. Approval_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. 잘라 내기 테이블 승인 _ 요청
  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 만 반환하고 다른 모든 테이블은 잊어 버립니다.
Stephen Smith

이 솔루션은 분명히 미쳤다. 나는 왜 투표를 얻지 못했는지 모른다. 내가 편집 한 실수로 인한 것일 수 있습니다.
Angelin Nadar

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

아이디어는 테이블을 삭제하고 다시 만드는 것일 수 있습니까?

편집하다:

@Jonathan Leffler : 사실

다른 제안 (또는 모든 테이블을자를 필요가없는 경우) :

특정 테이블을 자르기 위해 기본 저장 프로 시저를 만드는 것이 어떻습니까?

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

그것은 테이블에 대한 모든 제약, 권한, 뷰 등을 잃어 버립니다.
Jonathan Leffler

삭제 후 절단 대신 모든 테이블을 다시 시드 할 수 있습니다. 나는 마크 다운이 좌절되었다고 가정합니다. 백업을 복원하십시오.
Mark Redman 2019

-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가 먼저 하나의 라이너를 찾고 있다고 생각합니다. ... 그리고 두 번째로 모든 테이블을 한 번 가져 와서 삭제하는 명령입니다. 이를 위해서는 일종의 사용자 개입이 필요합니다. 그래도 게시물에 감사드립니다
Craig Wayne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.