SQL中如何设置表的自增主键和初始值

哎呀,我在和你谈论数据库时遇到了很多陷阱。

去年前我在公司做一个使用MySQL的项目。
那时,创建一个表并设置自增主键是非常容易的。
这样做,CREATE TABLE users(id INT AUTO_INCRMENT, name VARCHAR(2 5 5 ) NOT NULL, PRIMARY KEY(id));现在,ID列自行增加,从1 开始,一次输入一列,这很酷。
后来老板查表,确认ID不一致,难以识别。
我想知道是否应该更改默认值 1 00。

易于处理,ALTER TABLE USERS AUTO_INCRMENT = 1 00;他被杀了。
嘿,原来这件事有一个陷阱。
想一想,如果中间件崩溃了,或者事务回滚了,这个回滚的ID是应该直接丢弃,还是下次还有缺口需要填补呢? MySQL 会立即介入,不给您留下任何空间。
所以你看到的信息可能存在ID上的空白。
这个东西是为了性能,但是有时候会很烦人。

后来换了一个项目,用了PostgreSQL。
哥们,我的心情有点复杂。
它不会自动在列上创建 AUTO_INCRMENT,而必须先创建 SEQUENCE。

创建序列users_id_seq; CREATE TABLE users(id INT DEFAULT nextval('users_id_seq'), name VARCHAR(2 5 5 ) NULL, PRIMARY KEY(id));
或使用序列本身。

固定初始值也是有问题的,必须使用替代顺序。

ALTER SEQUENCE users_id_seq BEGIN AT 1 00 AGAIN;
PostgreSQL 序列更加灵活。
可以调整增量,例如增量2 、循环、CYCLE、预分配ID批量CACHE 2 0。
我尝试了一下,设置CACHE 2 0,发现ID生成快了很多,因为不需要每次都询问当前值是多少。

但这东西也不是没有缺点。
如果使用循环序列,就要注意了。
如果使用,则从头开始。
会不会很混乱?另外,在迁移数据库时,两个数据库的初始顺序值不同,这就产生了很大的问题。

所以你看,自动添加主键真是方便又无压力。
但如果你不明白这些细节,以后你会哭的现在已经晚了。
我建议不要随意设置默认值。
以后如果想要整合数据,就应该提前想好。
为了获得最大的并行性,应该使用顺序CACHE条目,但是您必须了解操作原理,以便在出现问题时不知道发生了什么。

唉,说多了我就会流泪。
如果您有任何疑问,请直接询问他们,我会尽力告诉您我在真实情况下是如何做到的。

如何用SQL语句给表里加主键加索引

SQLServer数据库添加主键和主键自增

sql 中 primary key 约束用法_sql 中 primary key 约束定义主键方法