【问题标题】:How to update column with null value如何使用空值更新列
【发布时间】:2011-04-21 16:42:42
【问题描述】:

我正在使用 mysql 并且需要更新具有空值的列。我尝试了很多不同的方法,我得到的最好的方法是一个空字符串。

是否有特殊的语法可以做到这一点?

【问题讨论】:

  • 列是否允许 NULL 值?
  • 更新表 SET 列 = NULL WHERE ...;不工作?
  • 不,一点也不。真的很奇怪

标签: mysql sql-update


【解决方案1】:

NULL is a special value in SQL. 所以要将属性设为空,请执行以下操作:

UPDATE table SET column = NULL;

【讨论】:

  • 现在,让我澄清一下。通过 php 我正在使用 PDO 并通过查询进行更新。
  • MySQL 手册指出,如果列不允许 NULL 值,将其设置为 NULL 将导致数据类型的默认值(例如空字符串)。您是否 100% 认为您的列允许为 NULL?你能告诉我们 CREATE TABLE 吗?
  • 我 1000% 确定。我已经检查了两次。让我再看一遍。
  • 是的,它实际上是空的。我可以在应该为空的数据中看到我的前端软件产生的 NULL。
【解决方案2】:

无特殊语法:

CREATE TABLE your_table (some_id int, your_column varchar(100));

INSERT INTO your_table VALUES (1, 'Hello');

UPDATE your_table
SET    your_column = NULL
WHERE  some_id = 1;

SELECT * FROM your_table WHERE your_column IS NULL;
+---------+-------------+
| some_id | your_column |
+---------+-------------+
|       1 | NULL        |
+---------+-------------+
1 row in set (0.00 sec)

【讨论】:

  • 谢谢丹尼尔。我有点相信这个问题可能出在我的应用程序代码中
【解决方案3】:

如果你关注

UPDATE table SET name = NULL

then name is "" not NULL IN MYSQL 表示你的查询

SELECT * FROM table WHERE name = NULL不工作或让自己失望

【讨论】:

    【解决方案4】:

    我怀疑这里的问题是在您的字符串值中输入了引号作为文字。您可以使用以下方法将这些列设置为空:

    UPDATE table SET col=NULL WHERE length(col)<3;
    

    您当然应该首先检查这些值是否确实是“”,例如:

    SELECT DISTINCT(col) FROM table WHERE length(col)<3;
    

    【讨论】:

      【解决方案5】:

      使用is 代替=

      例如:Select * from table_name where column is null

      【讨论】:

        【解决方案6】:

        空字符串而不是 true null 的另一个可能原因是该字段是索引或索引的一部分。这发生在我身上:使用 phpMyAdmin,我通过选中“Null”复选框然后点击“保存”按钮。显示“表定价已成功更改”,所以我认为更改发生了——它没有。在执行 UPDATE 将所有这些字段设置为 NULL 之后,它们被设置为 空字符串,所以我看了一下再次查看表结构,发现该字段的“Null”列设置为“no”。那时我意识到该字段是主键的一部分!

        【讨论】:

          【解决方案7】:

          记得查看您的列是否可以为空。您可以使用

          mysql> desc my_table;
          

          如果您的列不能为 null,则当您将值设置为 null 时,它将是对其的强制转换值。

          这里是一个例子

          mysql> create table example ( age int not null, name varchar(100) not null );
          mysql> insert into example values ( null, "without num" ), ( 2 , null );
          mysql> select * from example;
          +-----+-------------+
          | age | name        |
          +-----+-------------+
          |   0 | without num |
          |   2 |             |
          +-----+-------------+
          2 rows in set (0.00 sec)
          
          mysql> select * from example where age is null or name is null;
          Empty set (0.00 sec)
          

          【讨论】:

            【解决方案8】:

            对于那些面临类似问题的人,我发现当“模拟”SET = NULL 查询时,PHPMyAdmin 会抛出错误。这是一条红鲱鱼..只需运行查询,一切都会好起来的。

            【讨论】:

            • 谢谢,我在这里寻找是因为 PHPMyAdmin 声称在 NULL 附近有一个无法识别的关键字。阅读您的答案后,我运行了查询并按预期执行。
            【解决方案9】:

            如果您想使用更新查询设置空值,请将列值设置为 NULL(不带引号) 更新表名 set columnname = NULL

            但是,如果您在 mysql 工作台中直接编辑字段值,则使用 (Esc + del) 击键将空值插入所选列

            【讨论】:

              【解决方案10】:

              使用IS 而不是= 这将解决您的问题 示例语法:

              UPDATE studentdetails
              SET contactnumber = 9098979690
              WHERE contactnumber IS NULL;
              

              【讨论】:

                【解决方案11】:

                在上述答案中,已经提出了许多相同的方法和重复。 我一直在寻找问题的答案,但在这里找不到。

                提出上述问题的另一种方式“用空值更新列” 可能是“将列中的所有行更新为 NULL”

                在这种情况下跟随作品

                update table_name
                set field_name = NULL
                where field_name is not NULL;
                

                is 以及 is not 在 mysql 中工作

                【讨论】:

                • 您不需要“where ...”子句。如果一行已经有 null,并且只使用显示代码的前两行,它将运行同样快,可能更快。已经有 null 的行,根本不会写回 DB,因为没有变化。
                【解决方案12】:

                如果您为所有记录设置 NULL,请尝试以下操作:

                UPDATE `table_name` SET `column_you_want_set_null`= NULL
                

                或者只设置 NULL 特殊记录使用 WHERE

                UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 
                

                【讨论】:

                  【解决方案13】:

                  在插入时我们可以使用

                  $arrEntity=$entity->toArray();        
                      foreach ($arrEntity as $key => $value) {    
                          if (trim($entity->$key) == '' && !is_null($entity->$key) && !is_bool($entity->$key)){
                          unset($entity->$key);
                          }
                      }
                  

                  更新后我们可以使用

                  $fields=array();
                  foreach ($fields as $key => $value) {
                          if (trim($value) == '' && !is_null($value) && !is_bool($value)){
                              $fields[$key] = null;
                          }
                      }
                  

                  【讨论】:

                    猜你喜欢
                    • 2013-12-14
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-11-07
                    • 2012-10-29
                    • 1970-01-01
                    • 2019-02-19
                    • 1970-01-01
                    相关资源
                    最近更新 更多