programing

mysql의 모든 테이블에서 모든 행을 비우는 방법(sql)

codeshow 2023. 9. 4. 20:49
반응형

mysql의 모든 테이블에서 모든 행을 비우는 방법(sql)

저는 몇 가지 db 유틸리티 스크립트를 작성하고 있는데, 제가 해야 할 일 중 하나는 데이터만 재구축하고 스키마는 그대로 유지하는 것입니다.bash 및 mysql 도구(예: php 없음)를 사용하여 명령줄에서 이를 자동화하는 가장 쉬운 방법은 무엇입니까?

업데이트: 솔루션에서 모든 테이블을 하나의 명령으로 처리하고 가능하면 테이블을 추가하거나 제거할 경우 업데이트할 필요가 없습니다.

TRUNCATE tableName;

표의 내용을 비웁니다.

Q 편집에 대한 응답으로 편집:빠른 테스트를 통해 "show tables"를 하위 쿼리로 사용할 수 없는 것 같아서 적어도 2개의 쿼리를 수행해야 할 것 같습니다. bash에서 이 작업을 수행하는 방법을 모르기 때문에 여기 PHP 예제가 있는데 도움이 되길 바랍니다.

<?php      
mysql_connect('localhost', 'user', 'password');
$dbName = "database";
mysql_select_db($dbName); /*added semi-colon*/
$result_t = mysql_query("SHOW TABLES");
while($row = mysql_fetch_assoc($result_t))
{
   mysql_query("TRUNCATE " . $row['Tables_in_' . $dbName]);
}
?>

최소한 오류 처리가 필요합니다.

unix/linux에 있는 경우 셸을 사용하여 다음을 실행할 수 있습니다.

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

또는 Rational Relational은 이를 위해 저장 프로시저를 작성하는 방법에 대한 블로그 게시물을 가지고 있습니다.

다음은 데이터베이스 목록에서 모든 테이블을 잘라내는 BASH 원라이너입니다.

for j in database_name1 database_name2; \
do for i in `echo 'show tables ' |mysql $j \
|grep -v 'Tables_in'`; do mysql $j -e "truncate $i"; done; done

잘리면 프롬프트 없이 대상 테이블에서 모든 데이터가 제거됩니다.먼저 "자르기 $i"를 "i 설명"으로 변경하여 결과 집합의 테이블이 비워지도록 합니다.

한 가지 더: 모든 MySQL 데이터베이스의 모든 테이블에 대해 반복할 경우( 제외)information_schema그리고.mysql바라건대!), 위의 "database_name1 database_name2"를 다음과 같이 대체합니다.

`echo 'show databases' | mysql | awk '$1 != "information_schema" && \
$1 != "mysql" {if (NR > 1) {print}}'`

다음은 모든 MySQL 데이터베이스의 모든 테이블에 대해 OPTIMIZE를 수행하는 덜 파괴적인 샘플입니다(위에서 언급한 예외).

for j in `echo 'show databases' | mysql | \
awk '$1 != "information_schema" && $1 != \
"mysql" {if (NR > 1) {print}}'`; do for i in \
`echo 'show tables ' |mysql $j |grep -v \
'Tables_in'`; do mysql -e "optimize table $j.$i"; \
done; done

필요에 따라 많은 두려움과 함께 수행된 "동작"을 수정합니다!

phpMyAdmin을 통해 이 작업을 수행하려는 사용자는 다음 질문을 참조하십시오.

데이터베이스를 삭제하지 않고 phpMyAdmin에서 데이터베이스의 모든 테이블 내용을 삭제하려면 어떻게 해야 합니까?

언급URL : https://stackoverflow.com/questions/454174/how-to-empty-all-rows-from-all-tables-in-mysql-in-sql

반응형