2015-01-20 96 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

相关问题