2012-09-23 131 views
0

我不是mysql的专家。我有一个超过500个表的数据库,我想知道是否有方法搜索每个表中的某个记录,如果存在,则将其从表中删除。在此先感谢从mysql数据库的所有表中删除一条记录

+0

可能重复(http://stackoverflow.com/questions/1885101/delete-data-from-all-tables-in-mysql) – Lix

+0

我不想删除所有表或所有记录。我有一个函数,它接受一系列帐号并删除数据库中的记录,但是如何循环访问500多个表并检查帐号是否存在以及它是否从该表中删除 –

+0

看看我的答案。 –

回答

1

与此类似的东西。根据您的需要进行更改。的[删除所有表中的数据在MYSQL]

  $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); 
     } 
+0

感谢那正是我需要的。 –

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

    }