mysql。使用空值更新非空列

标签 mysql sql-update

mysql> SHOW COLUMNS from users LIKE 'created_at';
+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| created_at | datetime | NO   |     | NULL    |       |
+------------+----------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'innodb_strict_mode';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| innodb_strict_mode | ON    |
+--------------------+-------+
1 row in set (0.00 sec)

mysql> UPDATE `users` SET `created_at` = NULL WHERE `users`.`id` = 200;
Query OK, 1 row affected, 1 warning (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> SELECT `created_at` from `users` WHERE `users`.`id` = 200;
+---------------------+
| created_at          |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
1 row in set (0.00 sec)

这是正常行为吗?只是警告。

最佳答案

是的,这可能是正常行为。这取决于服务器的 SQL 模式。数据库可能未处于严格模式,并且允许零日期。

在此页面上查看更多详细信息 - Server SQL Modes :STRICT_ALL_TABLES,STRICT_TRANS_TABLES,NO_ZERO_DATE。

使用此查询检查当前 SQL 模式 -

SHOW VARIABLES WHERE variable_name = 'sql_mode';

关于mysql。使用空值更新非空列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20269039/

相关文章:

mysql - 优化案例陈述的最佳方法是什么?

mysql - 知道刚刚增加的值

mysql - 如何只更新 mysql 中文本条目的一部分?

mysql - 根据其他更新结果有条件地更新行

c# - 从mysql实时更新C#客户端

mysql - 不允许 Django 内连接

mysql - 为什么 MySQL 容器在带有 WSL 2 的 Windows 10 Home 上不断重启?

php - HTML 输入名称与数据库列名称的对应关系 : how to protect from possible attacks

sql - 尝试使用 CASE 语句更新多行时,Postgres 卡在大表上

PHP MySQL/PDO 更新问题