6

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

提前致谢!

4

4 回答 4

6

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

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

或者

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

基本上,这在 Master-Master 复制设置中被广泛使用。

于 2012-05-27T19:36:50.843 回答
2

尝试

SET @@auto_increment_increment=2;
SET @@auto_increment_offset=2;
于 2012-05-27T19:00:05.040 回答
2

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

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

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;
于 2012-05-27T19:08:31.137 回答
1

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

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

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

于 2012-05-27T19:10:46.097 回答