首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对特定表按n值逐步更改AUTO_INCREMENT属性

针对特定表按n值逐步更改AUTO_INCREMENT属性
EN

Stack Overflow用户
提问于 2013-02-15 23:19:54
回答 3查看 822关注 0票数 2

Change the step auto_increment fields increment by

上面的链接介绍了如何在mysql中更改AUTO_INCREMENT的step值。这将影响所有表。

这是mysql特有的行为吗?有人能推荐一个允许按表设置步长值的DBMS吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-15 23:51:26

从技术上讲,作为关键字的AUTO_INCREMENT是特定于MySQL的,因为其他RDBMS品牌实现了不同的功能来生成人工唯一的id值。MySQL和SQLite是仅有的两种广泛使用的关系型数据库管理系统,它们不支持每个表的增量选项。

Microsoft SQL Server

SQL Server使用IDENTITY选项声明一个列,并且IDENTITY关键字可以接受初始值和增量的参数,因此可以根据表的不同而不同。

代码语言:javascript
复制
CREATE TABLE employee
(
 id int IDENTITY(1,2),
 fname varchar (20),
 minit char(1),
 lname varchar(30)
)

甲骨文

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

代码语言:javascript
复制
CREATE SEQUENCE s START WITH 1 INCREMENT BY 10; 

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

PostgreSQL

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

代码语言:javascript
复制
CREATE SEQUENCE s START WITH 1 INCREMENT BY 10; 

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

您还可以将SERIAL声明为速记形式,这将隐式地为列创建一个序列。我还没有测试过它,但我想你可以改变它创建的序列的序列,来改变它的增量步长。

IBM DB2

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

代码语言:javascript
复制
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)
);

或者:

代码语言:javascript
复制
CREATE SEQUENCE EMPSERIAL
 AS BIGINT
 START WITH 1
 INCREMENT BY 10;

SQLite

SQlite似乎没有办法全局或按表更改其auto-increment增量;它按1递增,直到达到maxint,然后尝试几个随机值,然后放弃。

票数 3
EN

Stack Overflow用户

发布于 2013-02-15 23:27:04

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

票数 0
EN

Stack Overflow用户

发布于 2013-02-15 23:48:48

SQL Server -身份

代码语言:javascript
复制
IDENTITY [ (seed , increment) ]

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

Oracle序列

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14897774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档