如何使用手动增量值进行插入 - 选择?

时间:2014-02-15 06:32:24

标签: mysql sql

我有2个mysql数据库

  1. DB1
  2. DB2
  3. 我想从 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文件提供给我的客户端。

3 个答案:

答案 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;