为什么只有一行插入mysql表?

时间:2015-01-20 19:16:10

标签: mysql sql left-join

以下是完整查询:

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    |                |
+----------+--------------+------+-----+---------+----------------+

1 个答案:

答案 0 :(得分:4)

此处的问题是字段slug存在的唯一键。因为您没有将slug设置为insert语句中的任何内容,所以对于插入表中的每一行,它都设置相同。由于该值必须是唯一的,因此只有第一次插入才有效。有两种方法可以解决此问题:

  1. 删除slug
  2. 上的唯一约束
  3. 将唯一数据添加到slug字段
  4. 的insert语句中