2013-07-05 80 views
1

爲什麼我得到這個錯誤? 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。

回答

6

你得到,因爲

  1. 作爲NOT NULL
  2. user_id列沒有默認值指定
  3. 你不要在查詢中指定的值user_id列定義錯誤要麼

PS:這個問題與ON DUPLICATE KEY UPDATE子句無關 - 如果你沒有,則會出現同樣的錯誤也是如此。

PPS:無論是否ON DUPLICATE KEY UPDATE觸發 - 你insert應滿足所有約束

+0

所有真正的和理解的。但是這是一個現有庫的測試用例,我只是試圖修改庫並確保所有單元測試仍然通過。 :-( – CXJ

+0

@CXJ:所以我沒有看到你的觀點:-) – zerkms

+0

理論上,這個測試案例在某些時候起作用 - 在我從Github克隆庫之前。也許MySQL在舊版本中更加寬鬆,並且允許這種奇怪的DDL和SQL工作? – CXJ

0

的默認值設置爲user_id表:ALTER TABLE article ADD user_id int(11) NOT NULL DEFAULT {DEFAULT_VALUE} 或NOT NULL更改爲NULL

+1

之後 - 同樣應該與'title'和'content'列一起完成(這將導致一個奇怪的結構) – zerkms

+0

是的,如果他沒有給它一個值 –

+1

它會工作,但它會使感。 – zerkms

相關問題