Mysql 从另一个表插入,然后按id链接表
我需要重构公司表,以便将地址信息移动到专用的地址表中 所以我想我需要这样做来创建新的地址记录Mysql 从另一个表插入,然后按id链接表,mysql,insert,Mysql,Insert,我需要重构公司表,以便将地址信息移动到专用的地址表中 所以我想我需要这样做来创建新的地址记录 INSERT INTO address (city, country, ...) SELECT city,country, ... FROM company 但是,如何使用新创建的地址记录的id更新company表以保持引用完整性 有几个重复的地址,所以我不能只加入城市,国家等领域 更新 正如juergen d所提到的,我解决这个问题的方法是在地址表中创建一个临时的company_id列: ALTER
INSERT INTO address (city, country, ...)
SELECT city,country, ... FROM company
但是,如何使用新创建的地址记录的id更新company表以保持引用完整性
有几个重复的地址,所以我不能只加入城市,国家等领域
更新
正如juergen d所提到的,我解决这个问题的方法是在地址表中创建一个临时的company_id列:
ALTER TABLE address ADD company_id INTEGER
INSERT INTO address (city,country,company_id)
SELECT city,country,id from company
UPDATE company c set c.address_id = (select a.id from address a where a.company_id = c.id)
ALTER TABLE address DROP COLUMN company_id;
您可以在
地址表中使用公司id
INSERT INTO address (company_id, city, country, ...)
SELECT id, city, country, ...
FROM company
然后,无需将任何地址id
添加到公司
表中。您可以在地址
表中使用公司id
INSERT INTO address (company_id, city, country, ...)
SELECT id, city, country, ...
FROM company
那么就不需要在公司表中添加任何地址\u id
。之后使用选择LAST\u INSERT\u id()
获取新记录的id将持续\u INSERT\u id(),而不只是给我语句插入的最后一条记录的id,不管插入了多少条记录?是,我误解了你的问题。之后,使用选择LAST\u INSERT\u ID()
获取新记录的ID将LAST\u INSERT\u ID()不仅提供语句插入的最后一条记录的ID,无论插入了多少条记录?是,我误解了你的问题。我的数据库设计更适合作为关系拥有方的公司。但是我可以做的是临时创建company\u id列,按照您的建议进行插入,然后在删除company\u id列之前使用company\u id列更新company表。请参阅我的更新。我的数据库设计更适合作为关系拥有方的公司。但是我可以做的是临时创建company\u id列,按照您的建议进行插入,然后在删除company\u id列之前使用company\u id列更新company表。查看我的更新。
INSERT INTO address (company_id, city, country, ...)
SELECT id, city, country, ...
FROM company