MySQL:仅使用偶数或奇数自动递增?

时间:2012-05-27 18:55:16

标签: mysql

是否可以使用自动增量字段生成偶数或奇数(跳过相反的)?我问的原因是因为我想在两个表之间共享自动增量。其他实现目标的方法受到欢迎。

提前致谢!

4 个答案:

答案 0 :(得分:6)

如Juergen所述,您可以通过在my.ini文件中进行以下更改(或添加)来在系统级别而非会话级别执行此操作:

auto-increment-increment = 2
auto-increment-offset = 1

auto-increment-increment = 2
auto-increment-offset = 2

基本上,它主要用于Master-Master复制设置。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您可以使用触发器来实现自定义自动增量功能。

创建表以存储自定义自动增量值并插入一行包含初始值:

CREATE TABLE autoincrement_id (id_even INT, id_odd INT);
INSERT INTO autoincrement_id VALUES (0, 1);

创建触发器,相应地修改插入行的id值:

CREATE TRIGGER set_id_in_sometable_with_odd_id BEFORE INSERT ON `sometable_with_odd_id`
FOR EACH ROW
BEGIN
   SET NEW.id = (SELECT id_odd FROM autoincrement_id LIMIT 1);
   UPDATE autoincrement_id SET id_odd = id_odd + 2;
END;

CREATE TRIGGER set_id_in_sometable_with_even_id BEFORE INSERT ON `sometable_with_even_id`
FOR EACH ROW
BEGIN
   SET NEW.id = (SELECT id_even FROM autoincrement_id LIMIT 1);
   UPDATE autoincrement_id SET id_even = id_even + 2;
END;

答案 3 :(得分:1)

您可以从另一个表中偏移一个表的自动增量字段,即一个表从1开始,而另一个表从1000000开始(或根据您的使用模式选择一些其他值)。

CREATE TABLE table1 (id BIGINT UNSIGNED AUTO_INCREMENT);
CREATE TABLE table2 (id BIGINT UNSIGNED AUTO_INCREMENT) AUTO_INCREMENT = 1000000;

您还可以根据需要选择自动增量列类型。 BIGINT UNSIGNED的范围是0..18446744073709551615,应该涵盖大多数情况。