首页 > Mysql 需要两张表的自增主键不重复

Mysql 需要两张表的自增主键不重复

如题,有没有办法在数据库里就实现。
两张表的id还是得连续的,假设a表中有数据
1 小红
2 小名
b表中有数据
3 小看
4 小王
那么再向a插入数据应该为
5 小黑


方法1:不要定义自增长,用触发器来实现。
方法2:不要定义自增长,两张表共享同一个sequence。
方法3:自增长,但是一张表是奇数,另一张全是偶数:(不知道OP是不是要的这个效果)

drop table t1;
drop table t2;
SET @@auto_increment_increment=2;
SET @@auto_increment_offset=1;
create table t1(
        id BIGINT UNSIGNED AUTO_INCREMENT,
        foo varchar(10),
        primary key(id)
);

insert into t1(foo) values('a');
insert into t1(foo) values('b');
insert into t1(foo) values('c');

SET @@auto_increment_increment=2;
SET @@auto_increment_offset=2;

create table t2(
        id BIGINT UNSIGNED AUTO_INCREMENT,
        foo varchar(10),
        primary key(id)
);

insert into t2(foo) values('a');
insert into t2(foo) values('b');
insert into t2(foo) values('c');

select 't1',id,foo from t1 union all select 't2',id,foo from t2;

t1    1    a
t1    3    b
t1    5    c
t2    2    a
t2    4    b
t2    6    c

可以啊,自增的时候A表从1开始每次增2,B表从2开始每次增长2,那么
A:1,3,5,7,9,11....
B:2,4,6,8,10,12

不就是连续的吗?


相同的数据为什么要放到两个表中呢?如果是业务需求,那么可以用一个额外字段来区分。
如果只能两个表来满足需求的话,你可以再建一个c表记录当前最大id来管理这两张表,每次插入数据前检索该值然后写入数据库中,这样就能统一了。

【热门文章】
【热门文章】