是否可以使用自动增量字段生成偶数或奇数(跳过相反的)?我问的原因是因为我想在两个表之间共享自动增量。其他实现目标的方法受到欢迎。
提前致谢!
答案 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,应该涵盖大多数情况。