我有一个数据库,通过php脚本中的错误输入了很多值作为字符串'Null'而不是实际的NULL值。有没有找到表中的所有'Null'字符串并用NULL替换它们而不必搜索每一列?
答案 0 :(得分:1)
应该如此简单:
UPDATE tableName
SET columnName = NULL
WHERE columnName = 'Null'
答案 1 :(得分:1)
如果您想使用一个update
和多列:
UPDATE t
SET col1 = (case when col1 = 'NULL' then NULL else col1 end),
col2 = (case when col2 = 'NULL' then NULL else col2 end),
... ;
如果您有很多列并且不想编写所有代码,则可以运行如下查询:
select replace('XXX = (case when XXX = \'NULL\' then NULL else XXX end),',
'XXX', column_name)
from information_schema.columns
where table_name = YOURTABLENAME ;
答案 2 :(得分:0)
不确定你的意思是“而不是必须搜索每一列”。如果有很多列,并且您不希望按照@ john-conde的建议多次运行查询,那么替代方法是使用
将数据库转储为纯文本文件 mysqldump -u<user> -p<password> --database <dbname> > dbdump.sql
这会将您的数据库作为纯文本转储到名为dbdump.sql
的文件中。您可以在dbdump.sql
上使用您熟悉的任何查找/替换技术(例如sed,awk,perl,vi)。您只需要特别注意要更换的内容和位置。您应该确保只替换重要的字符串。一旦你这样做,你可以像这样
mysql -u<user> -p<password> <dbname> < dbdump.sql
您也可以一次转储一个表格 - &gt;修复它 - &gt;加载它。
如果您在生产中执行此操作,则需要进行额外的预防措施,以确保在执行此操作时不会对db进行写入操作。 mysqldump
在命令行上采用了其他几个选项,这有助于转储数据库的一致快照。