0

私はmysqlの専門家ではありません。500 を超えるテーブルを持つデータベースがあり、各テーブルで特定のレコードを検索し、存在する場合はテーブルから削除する方法があるかどうかを知りたいです。前もって感謝します

4

3 に答える 3

1

作成できる次のストアド プロシージャを見てください。

CREATE PROCEDURE procDeleteAllTables()

BEGIN
        DECLARE table_name VARCHAR(255);
        DECLARE end_of_tables INT DEFAULT 0;

        DECLARE cur CURSOR FOR 
            SELECT t.table_name 
            FROM information_schema.tables t 
            WHERE t.table_schema = DATABASE() AND t.table_type='BASE TABLE';
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET end_of_tables = 1;

        SET FOREIGN_KEY_CHECKS = 0;
        OPEN cur;

        tables_loop: LOOP
            FETCH cur INTO table_name;

            IF end_of_tables = 1 THEN
                LEAVE tables_loop;
            END IF;

            SET @s =  CONCAT('DELETE FROM ' , table_name);
            PREPARE stmt FROM @s;
            EXECUTE stmt;

        END LOOP;

        CLOSE cur;
        SET FOREIGN_KEY_CHECKS = 1;
    END

特定のレコードのチェックを挿入する必要がある場合は、次の方法で WHERE 句を追加できます。

SET @s =  CONCAT(CONCAT('DELETE FROM ' , table_name), ' WHERE somefield = 1');
于 2012-09-23T15:37:16.090 に答える
1

これに似たもの。必要に応じて変更を加えます。

         $tables = mysql_query('show tables', $conn);
         foreach( $acc_array as $acc)
           foreach( $tables as $v) {
           $result1 = mysql_fetch_assoc(mysql_query("select account_num from $v where account_num = '$acc'" , $conn));
          if( !empty($result1) )
            $result2 = mysql_query("delete from $v where account_num = '$acc'" , $conn);
         }
于 2012-09-23T15:40:09.493 に答える
0
$sql = "SHOW TABLES FROM dbname";
    $result = mysql_query($sql);

    if (!$result) {
        echo "DB Error, could not list tables\n";
        echo 'MySQL Error: ' . mysql_error();
        exit;
    }

    while ($row = mysql_fetch_row($result)) {


        echo "Table: {$row[0]}\n";
        $tablename=$row[0];
        $sql="DELETE FROM $tablename WHERE name='ddddd'";
        echo "Table: {$sql}\n";
        $res=mysql_query($sql);

    }
于 2012-09-23T17:24:28.573 に答える