programing

MYSQL의 모든 테이블에서 데이터 삭제

megabox 2023. 8. 7. 22:27
반응형

MYSQL의 모든 테이블에서 데이터 삭제

저는 100개의 테이블을 가지고 있고, 각각의 테이블에 40,000개의 줄이 있습니다.MySQL에 들어가서 모든 테이블에서 모든 행을 삭제하고 싶습니다.

...가능하다면, 한 진술서에?

데이터베이스와 테이블을 보관하고 싶습니다.

스키마를 유지하면서 모든 테이블을 잘라내는 가장 쉬운 방법입니다.

mysqldump -d -uuser -ppass --add-drop-table databasename > databasename.sql

mysql -uuser -ppass databasename < databasename.sql

내가 일하는 곳에서 사용되지 않기 때문에 저장 프로시저가 유지될지는 모르겠지만, 데이터베이스를 재설정하기 위해 정기적으로 사용합니다.

-dswitch on mysqdump는 "데이터를 덤프하지 않음"을 의미합니다.

--add-drop-table덤프의 모든 CREATE TABLE에 Drop TABLE 문을 추가합니다.

명령줄에서...

USE dbname

SET foreign_key_checks = 0;
TRUNCATE tablename;  //do this for each table you want emptied
SET foreign_key_checks = 1;

데이터베이스의 모든 테이블을 지우는 가장 강력한 방법은 Kostanos에서 제출한 DROP 데이터베이스 권한 없이 명령줄에서 모든 MySQL 테이블을 제거하는 방법입니다.

아래 코드는 현재 데이터베이스의 모든 테이블을 지우므로 계속하기 전에 다른 데이터베이스를 선택하는 것이 좋습니다.

USE DATABASE_YOU_WANT_TO_CLEAR;

다음 스니펫은 외부 키 제약 조건이 있는 경우에도 테이블에서 데이터를 제거합니다.또한 올바른 데이터베이스 선택을 잊은 경우를 대비하여 실제 정리 전에 테이블 목록을 두 번 확인할 수 있습니다.

-- save current foreign key settings and disable foreign key checks
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET GROUP_CONCAT_MAX_LEN=32768;  -- you never know how people name their tables
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables
  FROM information_schema.tables
  WHERE table_schema = (SELECT DATABASE());  -- operates on the current DB
SELECT IFNULL(@tables,'dummy') INTO @tables;  -- avoid error if there are no tables

-- At this point you might want to double check the list of tables
-- to be cleared.  Run SELECT @tables; to do so.

SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

저는 그렇게 생각하지 않습니다. (하지만 제가 전에 틀렸던 적이 있습니다.)제가 하려는 것은 이 경우들은 2단계 과정입니다.

DBMS에 명령줄 인터페이스가 있는 경우, 이 인터페이스를 사용하여 대부분의 작업을 수행하는 스크립트를 만들 수 있습니다.

db2 "select 'db2 delete from ' | tblname from sysibm.systables
    where owner = 'pax'" >p2.sh
p2.sh

첫 번째 비트는 단순히 다음을 만듭니다.p2.sh파일(또는 a)p2.cmd파일(윈도우즈 아래):delete from소유한 모든 테이블에 대한 설명pax그런 다음 명령 파일을 실행하여 더러운 작업을 수행합니다.물론 먼저 확인해보시는 것도 좋을 것 같습니다 :-)

당신이 찾고 있던 한 단계 프로세스가 아니라 여전히 매우 간단합니다.여기서 mysql에도 명령 줄 인터페이스가 있다고 가정합니다.

업데이트:

위의 MySQL 버전은 다음과 같습니다.

echo "select 'mysql truncate table ' | table_name
              from information_schema.tables" | mysql >p2.sh
bash p2.sh

이는 다음을 사용합니다.truncate보통 보다 더 효율적인 명령어delete from모든 행을 삭제합니다.또한 적절한 MySQL 시스템 테이블을 사용하여 테이블 이름을 가져옵니다.

하지만 한 가지 요점 - 당신은 다음과 같은 것을 넣는 것이 좋을 것입니다.where삭제할 테이블로 제한하려면 해당 테이블의 절을 선택합니다.현재 상태의 쿼리는 모든 테이블을 삭제하려고 시도합니다.한 가지 가능성은 특정한 방법으로 제한하는 것입니다.table_schema 및/는table_type가치.

이를 위해서는 각 테이블을 순환하고 다음 작업을 수행하는 저장 프로시저 또는 스크립트가 필요합니다.

truncate table <tablename>

잘라낼 테이블 목록을 가져오려면 다음과 같은 작업을 수행합니다.

SELECT table_name 
FROM INFORMATION_SCHEMA.tables 
WHERE table_schema = 'db_name' 

SQL 스크립트를 내보내고, 데이터베이스를 삭제하고, 스크립트에 대해 데이터베이스를 다시 만듭니다.:)

$ mysqldump --no-data -u [username] -p[password] [database] > [location]
$ mysql -u [username] -p[password]
mysql > drop database [database]; create database [database];
mysql > exit;
$ mysql -u [username] -p[password] [database] < [location]

--no-data스위치는 데이터베이스 테이블 정보만 유지하고 모든 테이블 데이터를 무시하므로 생성된 테이블을 다시 가져오기만 하면 됩니다..sql파일: 모든 테이블 정보를 다시 가져옵니다.

가능하지만 다음과 같은 부작용이 있을 수 있습니다.

drop database <dbname>;

테이블의 구조와 인덱스, 저장 프로시저 등이 삭제되는 것을 의미합니다.

다른 유일한 방법은 저장 프로시저를 작성하는 것입니다. 저장 프로시저는 어떻게든 루프합니다.

truncate table <tablename>;

생성 문이 없는 백업을 복원해야 했습니다.이전 백업을 복원했지만 데이터를 제거해야 했습니다.이 한 줄기는 제가 모든 것을 자를 수 있도록 도와주었습니다.

mysql -u user -ppass -NBe "SELECT 'SET foreign_key_checks = 0;' UNION SELECT CONCAT('TRUNCATE TABLE myschema.', table_name, ';') FROM INFORMATION_SCHEMA.tables WHERE table_schema = 'myschema' AND table_type = 'BASE TABLE'" | mysql -u user -ppass

줄 바꿈으로 다시 읽기 쉽게 하려면:

mysql -u user -ppass -NBe "SELECT 'SET foreign_key_checks = 0;' 
   UNION SELECT CONCAT('TRUNCATE TABLE myschema.', table_name, ';') 
   FROM INFORMATION_SCHEMA.tables 
   WHERE table_schema = 'myschema' AND table_type = 'BASE TABLE'"
      | mysql -u user -ppass

줄 바꿈 하고, " " 바 없 을 사 고 교 합 니 야 해 다 체 하 줄 용 문 꿈 이 열 자 ▁be 다 니 합 ▁the ▁breaks ▁without ▁replace줄 야 ▁string ▁suremyschema테이블 스키마를 사용하여 mysql 프로세스에 대한 올바른 로그인 자격 증명 또는 호스트를 설정합니다.

cPanel 또는 Plesk를 통해 phpMyAdmin에 액세스하는 것으로 시작합니다.

  1. phpMyAdmin 홈 페이지의 왼쪽 열에 있는 데이터베이스 목록에서 작업할 데이터베이스를 선택합니다.
  2. 표 목록이 왼쪽 열과 오른쪽 열에 나타납니다.
  3. 잘라낼 테이블을 선택합니다(데이터만 삭제).
  4. 드롭다운 상자에서 처음에 "선택됨:"이라고 표시되면 이 목록에서 "비움"을 선택합니다.
  5. 테이블을 잘라낼지 묻는 메시지가 나타납니다.잘라낼 테이블을 선택했는지 확인합니다.
  6. 테이블에서 데이터를 잘라내려면 예를 클릭합니다.
DELIMITER $$

DROP PROCEDURE IF EXISTS `cleanAllTables`$$

CREATE DEFINER=`root`@`%` PROCEDURE `cleanAllTables`()

BEGIN

DROP Temporary TABLE IF EXISTS AllTables;

Create Temporary Table AllTables (

SELECT @curRow := @curRow + 1 AS row_number
, table_name 
FROM INFORMATION_SCHEMA.tables s
JOIN    (SELECT @curRow := 0
) r
WHERE s.table_schema = 'databasename');

set @countOfAllTables = (select count(*) from AllTables);
set @c = 1;
WHILE @c<=@countOfAllTables DO

    set @table_name = (select table_name from AllTables where row_number = @c);
    set @stmt = concat( 'Truncate Table ', @table_name);
    Prepare stmt from @stmt;
    Execute stmt;
  SET @c = @c + 1 ;
END WHILE ;

END$$

DELIMITER ;

이것은 MySQL 5에서 작동하며 테이블에 특화되어 있습니다.

echo 'show tables' | mysql --skip-column-names -u root YOUR_DB | awk '{print "truncate table " $0 ";"}' | mysql -u root YOUR_DB

데이터베이스 이름으로 YOR_DB를 바꿉니다.비밀번호를 두 번 제공해야 하므로 다시 생각할 기회가 있습니다... ;-)

데이터베이스 구조를 내보내고 데이터베이스를 삭제한 다음 다시 만들고 구조를 가져올 수 없는 이유는 무엇입니까?

이 두 줄의 스크립트가 최고입니다...먹어봐.

EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'DELETE FROM ?'
GO

MySQL Workbench를 사용하여 데이터베이스의 엔티티 관계 다이어그램을 가져옵니다(Workbench : Database -> Reverse Engineer).그런 다음 데이터베이스를 삭제합니다.그런 다음 Workbench(데이터베이스 -> Forward Engineer)를 사용하여 데이터베이스를 만듭니다.

그냥 추측일 뿐...먹어봐.

테이블 잘라내기 *;

또는

테이블 잘라내기 테이블 1, 테이블 2, 테이블 3;

또는

표 1, 표 2, 표 3에서 삭제합니다. 여기서 1=1;

언급URL : https://stackoverflow.com/questions/1885101/delete-data-from-all-tables-in-mysql

반응형