我手动插入了两条新记录,将 id 设置为 max (id)+1* *
这种方法是完全错误的,在任何数据库中都不起作用。到目前为止,它只在 MySQL 中对你有用,这完全是幸运的。
如果两个连接同时运行,它们将获得相同的 ID。只有锁定表以防止并发读取,它才能可靠地工作,这样一次只能有一个连接获取 ID。
它也非常低效。
这就是序列存在的原因,这样您就可以在存在并发插入器的情况下可靠地获取 ID。
只需使用:
INSERT INTO my_table(data1, data2) VALUES ('a','b') RETURNING id;
或者:
INSERT INTO my_table(id, data1, data2) VALUES (DEFAULT, 'a','b') RETURNING id;
DEFAULT
是一个特殊的占位符,它告诉数据库从表定义中获取该列的默认值。默认值为nextval('my_table_id_seq')
,因此将插入下一个序列值。
由于您要询问有关序列的基本问题,因此我建议您还考虑序列不是 gapless。序列有“洞”是正常的,其中表格值为 1、3、4、5、9、10,...。