爲什麼我得到這個錯誤? MySQL版本發生了什麼變化,會導致這種情況(在一點上起作用)現在失敗了? INSERT INTO不指定如果插入完成需要的user_id值,但由於id 1已經存在,這應該成爲UPDATE並且是有效的。MySQL默認值錯誤與ON DUPLICATE KEY 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。
所有真正的和理解的。但是這是一個現有庫的測試用例,我只是試圖修改庫並確保所有單元測試仍然通過。 :-( – CXJ
@CXJ:所以我沒有看到你的觀點:-) – zerkms
理論上,這個測試案例在某些時候起作用 - 在我從Github克隆庫之前。也許MySQL在舊版本中更加寬鬆,並且允許這種奇怪的DDL和SQL工作? – CXJ