我有两张表格,布局如下......
------------- -------------------------
| Master | | History |
------------- -------------------------
| id | name | | id | name | master_id |
------------- -------------------------
history
表包含master_id
为NULL
的行。那些我复制到master
表。
INSERT master (name)
SELECT name
FROM histories h
WHERE h.master_id = NULL
如何使用master_id
表中关联对象的history
更新id
表中的master
?此更新应在插入的同一步骤中进行。如果感兴趣,我会使用MySQL。
答案 0 :(得分:1)
可以根据另一个表中的某些信息,在master
表记录中插入ID。
例如,您可以使用histories.id + last master.id:
LOCK TABLES master WRITE, histories AS h WRITE;
SELECT id FROM master ORDER BY id DESC LIMIT 1 INTO @last_master_id;
INSERT INTO master (id, name)
SELECT h.id + @last_master_id, h.name FROM histories h;
UPDATE histories h SET h.master_id = h.id + @last_master_id;
UNLOCK TABLES;
只要您使用整数ID,并且您不介意新ID基于另一个ID,这是有效的。
如果您想使用某些非确定性ID,例如UUID,则解决方案需要更多步骤:
histories
表。update histories set tmp_uuid = UUID()
,类似的内容)。master
... tmp_uuid
选择histories
histories
使用UUID的一个优点是您不需要锁定表。您不必担心其他会话插入记录并获取您的ID,因为另一个会话会生成不同的ID。
答案 1 :(得分:0)
此处的SQL文档:http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html
建议您应该能够执行以下操作:
INSERT master (name)
SELECT name, id
FROM history h
WHERE h.master_id = NULL
UPDATE History SET master_id = LAST_INSERT_ID()
WHERE History.id = h.id;
虽然我不是100%的语法,因为我没有SQL实例,我可以反对。