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

MySQL:仅使用偶数或奇数自动递增?,mysql,Mysql,是否可以使用自动递增字段生成偶数或奇数(跳过相反方向)?我问这个问题的原因是因为我想在两个表之间共享自动增量。其他实现这一目标的方法也受到欢迎 提前谢谢 试试看 SET @@auto_increment_increment=2; SET @@auto_increment_offset=2; 您可以使用触发器实现自定义自动增量功能 创建表格以存储自定义自动增量值,并插入一行初始值: CREATE TABLE autoincrement_id (id_even INT, id_odd INT);

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

提前谢谢

试试看

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;

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


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

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

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


基本上,这在主复制设置中经常使用。

您计划如何在两个表之间共享autoincrement字段?这可能与答案有关。简单地说,这两个表是相同的(两者都可以使用),我必须避免它们的自动递增字段的重复数。你能更详细地描述任务吗?是的,但是考虑到它会产生全局性的影响,这对我来说并不太合适。好吧,那么在这种情况下,你应该使用基于会话的方法,它不会比你从php脚本连接的时间长。
auto-increment-increment = 2
auto-increment-offset = 1
auto-increment-increment = 2
auto-increment-offset = 2