我有2个mysql数据库
我想从 DB1 下的 contact_mst 表中选择所有联系人值,然后在下的 contact_mst 表中插入所有这些值DB2 即可。我不想出于某种原因复制 contact_id 字段,并希望保持增量,但也不希望它们是 AUTO_INCREMENT ,因为我使用了2个主键< strong> Company_id ,即1和 Contact_id ,它是出于特定目的使用php代码自动生成的。
所以我做了一个SQL查询来传输这样的数据:
INSERT INTO DB2.contactsmaster (Company_id, Contact_id, Contact_person)
SELECT 1, (SELECT COALESCE(MAX(Contact_id),0)+1 FROM DB2.contactsmaster), Contact_person FROM DB1.contact_mst;
我认为我做错了什么,因为这不会每次生成新的IDS,每次都会将 Contact_id 返回为1。
有什么建议吗? 附:我只想使用SQL Query来实现这一点。我知道我可以使用PHP代码执行此操作,但实际上我想将.sql文件提供给我的客户端。
答案 0 :(得分:2)
下面是用于将记录插入表tab2的示例代码,其中列a
的值是整数序列,列b的值与tab1的列b的值相同
create table tab1
(
a int,
b int
);
create table tab2
(
a int,
b int
);
insert into tab1
values
(10,20),(30,40);
tab1内容:
| a | b |
---------
|10 |20 |
|30 |40 |
insert into tab2
select @row := @row + 1, b FROM tab1 , (SELECT @row := 0) r
tab2内容:
| a | b |
---------
|1 |20 |
|2 |40 |
检查sqlfiddle查询的工作情况: http://www.sqlfiddle.com/#!2/5f9a39/1
让我知道它是否解决了你的问题。
答案 1 :(得分:0)
试试这个
INSERT INTO DB2.contactsmaster (Company_id, Contact_id, Contact_person)
VALUES(
1,
(SELECT COALESCE(MAX(Contact_id),0)+1 FROM DB2.contactsmaster),
(SELECT Contact_person FROM DB1.contact_mst LIMIT 1)
)
答案 2 :(得分:0)
要插入带有单独密钥生成的记录,您需要使用触发器来插入密钥
在db2中创建波纹管触发器
CREATE TRIGGER `trg_before_insert` BEFORE INSERT ON `contactsmaster `
FOR EACH ROW
set new.Contact_id =(SELECT COALESCE(MAX(Contact_id),0)+1 FROM contactsmaster)
DELIMITER ;
触发器创建后执行bellow sql
INSERT INTO DB2.contactsmaster (Company_id, Contact_person)
SELECT 1, Contact_person FROM DB1.contact_mst;