1.sqlite3
两种方式设置auto:
- 建表时隐式创建它INTEGER PRIMARY KEY
- 使用AUTOINCREMENT关键字显式创建
方式1利用了rowid; 方式2是另一套不同的算法,采用了中间表SQLITE_SEQUENCE table记录增长。详细介绍见官网:https://sqlite.org/autoinc.html
AUTOINCREMENT:
AUTOINCREMENT的主键必须是INTEGER类型,但是INTEGER类型的主键本身默认就是自动增长的。
AUTOINCREMENT并不是字面上“自动增长”的意思(或许2.3.4版本以前是,但现在不是),而是表示当id等于最大支持的数后(9223372036854775807),再插入数据时可以重复使用原来已删除或没有使用的行。AUTOINCREMENT的一个缺点是,它使用了额外的CPU,内存,磁盘空间和磁盘I/O开销。
对INTEGER PRIMARY KEY手动插入一个后续值比如20,而auto之前的值小于20,当auto下一个为20时,sqlite3不会出错,会自动检测。
2.PostgreSQL
PostgreSQL数据类型为smallserial,serial和bigserial时,拥有类似于某些其他数据库支持的AUTO_INCREMENT属性。这些不是真实的类型,而仅仅为了创建唯一标识符列的符号方便。类型名称