将AUTO_INCREMENT属性逐步更改为特定表的值

时间:2013-02-15 15:19:54

标签: mysql sql

Change the step auto_increment fields increment by

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

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

3 个答案:

答案 0 :(得分:3)

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

Microsoft SQL Server

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

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

的Oracle

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

CREATE SEQUENCE s START WITH 1 INCREMENT BY 10; 

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

的PostgreSQL

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

CREATE SEQUENCE s START WITH 1 INCREMENT BY 10; 

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

您也可以将SERIAL声明为简写,这会隐式地为列创建序列。我没有对它进行测试,但我想你可以对它创建的序列进行更改,以改变它的增量步骤。

IBM DB2

DB2也有序列对象。 DB2还可以将列声明为auto-generate identity值。

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似乎没有办法在全局或每个表中更改其auto-increment增量;它递增1直到达到maxint,然后尝试一些随机值,然后放弃。

答案 1 :(得分:0)

您是否在询问其他数据库系统是否可以更改AUTO_INCREMENT的步长值?如果是,是的,您可以在SQL Server中执行此操作。我怀疑大多数RDBS支持这一点,但我知道SQL Server支持它。

答案 2 :(得分:0)

SQL Server - IDENTITY

IDENTITY [ (seed , increment) ]

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

Oracle - SEQUENCE

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