MySQL默认值错误与ON DUPLICATE KEY UPDATE

pkwftd7m  于 2023-04-05  发布在  Mysql
关注(0)|答案(3)|浏览(125)

为什么我会得到这个错误?MySQL版本发生了什么变化,导致这个(曾经工作过)现在失败了吗?INSERT INTO没有指定user_id值,如果插入完成,那么这个值是必需的,但是因为id 1已经存在,所以这应该成为UPDATE并且是有效的。

mysql> select * from article;
+----+---------+---------------------+-----------+-----------+
| id | user_id | published_at        | title     | content   |
+----+---------+---------------------+-----------+-----------+
|  1 |       1 | 2011-12-10 12:10:00 | article 1 | content 1 |
|  2 |       2 | 2011-12-20 16:20:00 | article 2 | content 2 |
|  3 |       1 | 2012-01-04 22:00:00 | article 3 | content 3 |
+----+---------+---------------------+-----------+-----------+
3 rows in set (0.00 sec)

mysql> desc article;
+--------------+------------------+------+-----+-------------------+----------------+
| Field        | Type             | Null | Key | Default           | Extra          |
+--------------+------------------+------+-----+-------------------+----------------+
| id           | int(11) unsigned | NO   | PRI | NULL              | auto_increment |
| user_id      | int(11) unsigned | NO   | MUL | NULL              |                |
| published_at | datetime         | NO   |     | CURRENT_TIMESTAMP |                |
| title        | varchar(100)     | NO   |     | NULL              |                |
| content      | text             | NO   |     | NULL              |                |
+--------------+------------------+------+-----+-------------------+----------------+
5 rows in set (0.01 sec)

mysql> INSERT INTO article (id)
    -> VALUES (1)
    -> ON DUPLICATE KEY UPDATE title = 'article 1b', content = 'content 1b';
ERROR 1364 (HY000): Field 'user_id' doesn't have a default value

MySQL版本5.6.12。

nzk0hqpo

nzk0hqpo1#

你得到错误是因为

  1. user_id列定义为NOT NULL
  2. user_id列未指定默认值
    1.也不要在查询中指定它的值
    PS:这个问题与ON DUPLICATE KEY UPDATE子句无关-如果你不使用它,也会出现同样的错误。
    PPS:无论是否触发ON DUPLICATE KEY UPDATE-您的insert都应满足所有约束
7rfyedvj

7rfyedvj2#

使用以下命令为user_id表设置默认值:ALTER TABLE article ADD user_id int(11) NOT NULL DEFAULT {DEFAULT_VALUE}或从NOT NULL更改为NULL

xzv2uavs

xzv2uavs3#

如果你知道你只是在更新,但是插入的任何一行都会导致错误,这是一个欺骗。

INSERT INTO article (id, `user_id`)
VALUES (1, `user_id`)
ON DUPLICATE KEY UPDATE
title = 'article 1b',
content = 'content 1b';

相关问题