是否可以有自动增量字段生成偶数或奇数(跳过相反的)?我问的原因是因为我想在两个表之间共享自动增量。欢迎其他实现它的方法。
提前致谢!
正如 Juergen 所提到的,您可以通过在 my.ini 文件中进行以下更改(或添加)来在系统级别而不是会话级别执行此操作:
auto-increment-increment = 2
auto-increment-offset = 1
或者
auto-increment-increment = 2
auto-increment-offset = 2
基本上,这在 Master-Master 复制设置中被广泛使用。
尝试
SET @@auto_increment_increment=2;
SET @@auto_increment_offset=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;
您可以从另一个表中偏移一个表的自动增量字段,即一个表从 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,应该涵盖大多数情况。