对于单个查询,我们是否可以将所有列和行的值设为NULL或Zero(0)?
我已经尝试过在数据库中处理2 3个表,但失败了;将它们设为空。
发布于 2019-05-15 19:59:38
要在mysql中更新多个表,您可以使用以下命令:
UPDATE table1 , table2 SET table1.column = 0 , table2.column =0如果您不知道这些字段,可以生成一个查询来获取所需的所有子查询
SELECT CONCAT("UPDATE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` SET `",COLUMN_NAME,"` = 0 ") AS MySQLCMD FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "you_db_name_here"现在您有了对0的所有查询,数据库中所有表中的所有列,那么现在可以使用PREPARE EXECUTE
SET @query :="";
SELECT @query := CONCAT("UPDATE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` SET `",COLUMN_NAME,"` = 0 ") AS MySQLCMD FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "you_db_name_here";
PREPARE stmt FROM @query;
EXECUTE stmt;如果您有主键,这将不起作用,我们需要跳过它们,最终结果将如下所示
SET @query :="";
SELECT @query := CONCAT("UPDATE `", C.TABLE_SCHEMA,"`.`", C.TABLE_NAME, "` SET `",C.COLUMN_NAME,"` = '' ") AS MySQLCMD from information_Schema.Columns C LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE U ON C.COLUMN_NAME = U.COLUMN_NAME WHERE C.TABLE_SCHEMA = "you_db_name_here" AND U.CONSTRAINT_NAME is NULL;
PREPARE stmt FROM @query;
EXECUTE stmt;发布于 2019-05-15 18:54:06
也许这就是你想要的或者不想要的。我不明白为什么要将现有行中的列值设置为所有NULL或0。清空表格,这样就没有行了,不是更好吗?然后,您可以添加所需的新行。
要有效地清空表,请使用truncate
truncate table t;如果要将表中的所有列都设置为value,只需使用update并列出所有列:
update t
set col1 = null,
col2 = null,
. . .;然而,我不明白为什么这将是有用的。
发布于 2019-05-15 20:41:20
$sql="SELECT CONCAT('UPDATE ', TABLE_SCHEMA,'.', TABLE_NAME, ' SET ',COLUMN_NAME,' = 0;') AS MySQLCMD FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'DATABASE_NAME' ";
$result=$conn->query($sql);
if($result->num_rows> 0){
while($row=$result->fetch_assoc()){
$exe=$conn->query($row['MySQLCMD']);
}}
这就是我需要的答案。非常感谢您的宝贵建议。特别感谢:angel.bonev
https://stackoverflow.com/questions/56147592
复制相似问题