为什么只插入一行到mysql table?
Why only one row is inserted into mysql table?
这是完整的查询:
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');
查询的 select 部分 returns 完整结果,但整个查询仅插入第一行。
此查询有什么问题以及如何解决?
更新:这是 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 | |
+----------+--------------+------+-----+---------+----------------+
这里的问题是字段 slug
存在的唯一键。因为您没有将 slug
设置为插入语句中的任何内容,所以对于插入到 table 中的每一行都设置相同。由于该值必须是唯一的,因此只有第一次插入有效。有两种可能的方法可以解决此问题:
- 移除
slug
的唯一约束
- 向
slug
字段的插入语句添加唯一数据
这是完整的查询:
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');
查询的 select 部分 returns 完整结果,但整个查询仅插入第一行。
此查询有什么问题以及如何解决?
更新:这是 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 | |
+----------+--------------+------+-----+---------+----------------+
这里的问题是字段 slug
存在的唯一键。因为您没有将 slug
设置为插入语句中的任何内容,所以对于插入到 table 中的每一行都设置相同。由于该值必须是唯一的,因此只有第一次插入有效。有两种可能的方法可以解决此问题:
- 移除
slug
的唯一约束
- 向
slug
字段的插入语句添加唯一数据