2

将步骤 auto_increment 字段增量更改为

上面的链接描述了如何在mysql中改变AUTO_INCREMENT的步长值。这将影响所有表。

这种行为是特定于 mysql 的吗?有人可以建议一个允许为每个表设置步长值的 DBMS 吗?

4

3 回答 3

3

从技术上讲,AUTO_INCREMENT作为关键字是 MySQL 特有的,因为其他 RDBMS 品牌实现了不同的功能来生成人为的唯一 id 值。MySQL 和 SQLite 是唯一广泛使用的不允许按表递增选项的 RDBMS。

微软 SQL 服务器

SQL Server 声明一个带有IDENTITY选项的列,并且 IDENTITY 关键字可以接受初始值和增量的参数,因此您可以对每个表进行更改。

CREATE TABLE employee
(
 id int IDENTITY(1,2),
 fname varchar (20),
 minit char(1),
 lname varchar(30)
)

甲骨文

Oracle 使用SEQUENCE对象,您调用 NEXTVAL() 来获取主键的新值。您可以对多个表使用单个序列,或对特定表使用特定序列,或任意组合。每次插入时,您只需明确命名序列。

CREATE SEQUENCE s START WITH 1 INCREMENT BY 10; 

INSERT INTO employee (id) VALUES (s.NEXTVAL);

PostgreSQL

PostgreSQL 具有具有相同选项的序列对象,您可以声明表使用哪个序列来自动生成值。

CREATE SEQUENCE s START WITH 1 INCREMENT BY 10; 

CREATE TABLE employee (
    id integer NOT NULL DEFAULT NEXTVAL('s')
);

您还可以将SERIAL声明为简写,这会隐式地为列创建一个序列。我没有测试过它,但我想你可以在它创建的序列上改变序列,以改变它的增量步骤。

IBM DB2

DB2 也有序列对象。DB2 还可以声明列以自动生成标识值。

CREATE TABLE EMPLOYEE (
  SERIALNUMBER  BIGINT NOT NULL 
        GENERATED ALWAYS AS IDENTITY
        (START WITH 1, INCREMENT BY 1),
  FIRSTNAME CHAR(64),
  LASTNAME  CHAR(64),
  SALARY        DECIMAL(10, 2),
  PRIMARY KEY (SERIALNUMBER)
);

或者:

CREATE SEQUENCE EMPSERIAL
 AS BIGINT
 START WITH 1
 INCREMENT BY 10;

SQLite

SQlite 似乎没有办法在全局或每个表中更改其自动增量;它递增 1 直到达到 maxint,然后尝试一些随机值,然后放弃。

于 2013-02-15T15:51:25.993 回答
0

你是问其他数据库系统能不能改变AUTO_INCREMENT的步长值?如果是这样,是的,您可以在 SQL Server 中执行此操作。我怀疑大多数 RDBS 都支持这个,但我知道 SQL Server 支持它。

于 2013-02-15T15:27:03.513 回答
0

SQL Server - 身份

IDENTITY [ (seed , increment) ]

http://msdn.microsoft.com/en-us/library/ms186775.aspx

甲骨文 - 序列

CREATE SEQUENCE Test_Sequence
INCREMENT BY 1
START WITH 1;

INSERT INTO Test (ID, Val)
VALUES (Test_Sequence.NEXTVAL, 1);

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_6015.htm

于 2013-02-15T15:48:48.310 回答