2015-01-20 36 views
1

下面是完整的查詢:爲什麼只有一行插入到mysql表中?

INSERT IGNORE INTO db2.story (created, title, body) 
SELECT 
FROM_UNIXTIME(n.created), 
n.title, 
b.body_value 
FROM db1.node n, db1.body_field b 
WHERE n.nid= b.id and n.type IN ('story'); 

的查詢返回完整的結果,但整個查詢只是插入的第一行的選擇部分。

這個查詢有什麼問題,以及如何解決它?

更新:這裏是db2.story的結構:

+----------+--------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+----------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| title | varchar(100) | NO |  | NULL |    | 
| body  | longtext  | NO |  | NULL |    | 
| teaser | longtext  | NO |  | NULL |    | 
| created | datetime  | NO |  | NULL |    | 
| visits | int(11)  | NO |  | NULL |    | 
| slug  | varchar(100) | NO | UNI | NULL |    | 
+----------+--------------+------+-----+---------+----------------+ 
+2

擺脫忽略並查看錯誤被拋出。可能是一個重要的違規,如重複密鑰。如果性能不是問題,並且您想更新重複項,您可以隨時進行REPLACE INTO – Ray 2015-01-20 19:18:48

+0

當我擺脫IGNORE mysql投訴時:重複輸入''作爲關鍵'slug',這並不奇怪。 – supermario 2015-01-20 19:23:10

+0

db2.story表上是否有主鍵?你能告訴我們'DESC db2.story'的輸出嗎? – 2015-01-20 19:32:52

回答

4

這裏的問題是唯一的關鍵是存在的領域slug。因爲在插入語句中沒有將slug設置爲任何內容,所以插入到表中的每一行都將設置爲相同。由於該值必須是唯一的,因此只有第一個插入工作。有兩種可能的方法來解決這個問題:

  1. slug
  2. 刪除唯一約束獨特的數據添加到您的插入語句爲slug
+0

如果MySQL未設置爲STRICT模式,則NOT NULL字段將設置爲空字符串''。這就是爲什麼'slug'字段上有''重複條目的原因。 – 2015-01-20 19:47:45

+0

正確的是,在刪除uniqe約束之後,插入所有行。非常感謝。 – supermario 2015-01-21 05:56:15