7

このエラーが発生するのはなぜですか? これ (ある時点で機能していた) が失敗する原因となる、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。

4

2 に答える 2

11

エラーが発生しているため

  1. user_id列は次のように定義されます。NOT NULL
  2. 列にuser_idデフォルト値が指定されていません
  3. クエリでもその値を指定しません

PS: 質問は句とは無関係ON DUPLICATE KEY UPDATEです。使用しなかった場合も同じエラーになります。

PPS:ON DUPLICATE KEY UPDATEトリガーされたかどうかに関係なく、insertすべての制約を満たす必要があります

于 2013-07-05T00:47:14.740 に答える
1

user_id以下を使用してテーブルにデフォルト値を設定するALTER TABLE article ADD user_id int(11) NOT NULL DEFAULT {DEFAULT_VALUE} か、NOT NULL から NULL に変更します。

于 2013-07-05T00:47:47.580 に答える