更新所有 NULL 字段 MySQL
我想将一个表中的所有 NULL 字段更新为 0。当然
UPDATE mytable SET firstcol=0 WHERE firstcol IS NULL
可以完成这项工作。但我想知道是否有比只为每列 c&p 这条线更聪明的解决方案。
I'd like to update all NULL fields in one table to 0. Of course
UPDATE mytable SET firstcol=0 WHERE firstcol IS NULL
would do the job. But I wonder if there´s a smarter solution than just c&p this line for every column.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您可以执行此操作 - 根据需要对每一列重复:
示例:
UPDATE
如果您想通过更改列来更改表结构,以便它们不再接受空值,您可以使用存储过程来完成。以下存储过程查询 INFORMATION_SCHEMA COLUMNS 以获取有关以下内容的信息:给定数据库表中的列。根据该信息,它构建了一个准备好的语句,然后用于更改表结构。您可能需要对其进行调整以满足您的具体要求 - 目前,它会查找未设置
NOT NULL
的INT
列:示例:
以下行显示要执行的命令,如有必要,可以从存储过程中删除:
You could do this - repeat as necessary for each column:
Example:
UPDATE
If you want to alter the table structure by changing columns so that they no longer accept nulls, you could do it with a stored procedure. The following stored procedure queries the INFORMATION_SCHEMA COLUMNS for information about columns in a given database table. From that information, it builds up a prepared statement which is then used to alter the table structure. You may need to tweak it to suit your exact requirements - at the moment, it looks for
INT
columns which do not haveNOT NULL
set:Example:
The following line displays the command that is to be executed, and may be removed from the stored procedure if necessary:
您可以将列
ALTER
更改为NOT NULL DEFAULT 0
吗?您可以按照 MySQL 文档:
Can you just
ALTER
the columns toNOT NULL DEFAULT 0
?You can do this in a single statement, as per MySQL documentation:
您可能希望将列更改为
NOT NULL
。测试用例:
结果:
You may want to alter your columns to
NOT NULL
.Test case:
Result:
并非没有中间技术或光标。您可以使用
DESCRIBE mytable;
获取列名称并循环它们以构建您的UPDATE
查询。所以这是可能的。但当你写下这些内容时,你可能已经复制并粘贴了;)
Not without an intermediate technology or cursor. You could use
DESCRIBE mytable;
to get the column names and loop over them to build yourUPDATE
queries.So it is possible. But by the time it took you to write that, you probably just could have copy and pasted ;)
这对我有用!
这是迈克的答案,但没有左侧列的引号!
注意:如果列的数据类型为int,则如果您尝试将值设置为“0”而不是空字符串
This worked for me!
This is mike's answer but without the quotes for columns on the left !
Note: If you are trying to set your values '0' instead of an empty string if a column's datatype is int
我不相信有;任何对不满足 where 子句的行起作用的语句都会更新您不打算更新的行。杰森的答案是正确的,但是,我认为有点不安全,除非你真的确定这就是你想要的。
I don't believe there is; any statement that worked on rows that didn't satisfy the where clause would update rows you didn't intent to update. Jason's answer is correct, but, I think, a bit unsafe, unless you are really sure that's what you want.
ALTER TABLE
dataBaseName
.tableName
ADD COLUMN
columnX
INT(20) NULL DEFAULT 1 AFTERcolumnY
;它执行以下操作
ALTER TABLE
dataBaseName
.tableName
ADD COLUMN
columnX
INT(20) NULL DEFAULT 1 AFTERcolumnY
;It does the following