MySQL中的序列使用

MySQL中使用序列的方法是使用AUTO_INCREMENT属性来定义列。

AUTO_INCREMENT属性1开始,以1为基数递增。

当插入记录时,如果把一个NULL插入到一个AUTO_INCREMENT列,MySQL将自动生成下一个序列编号。

当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。

当插入记录时,如果为AUTO_INCREMENT字段明确指定了一个数值,则会出现两种情况。

一、如果插入的值与已有的编号重复,会出现出错信息, 因为AUTO_INCREMENT数据列的值必须是唯一的。

二、如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值 开始递增。

如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。

 

使用示例:

# 创建表,用AUTO_INCREMENT定义ID列
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (ID),
    NAME VARCHAR(30) NOT NULL,
    REMARK VARCHAR(30)
);
# 插入数据
INSERT INTO TEST(NAME) VALUES('Jake');
INSERT INTO TEST(NAME) VALUES('Tom');
INSERT INTO TEST(NAME) VALUES('Kimi');
# 查看数据库可以看出,ID列自动在增长
SELECT * FROM TEST;
+----+------+--------+
| ID | NAME | REMARK |
+----+------+--------+
|  1 | Jake | NULL   |
|  2 | Tom  | NULL   |
|  3 | Kimi | NULL   |
+----+------+--------+
3 rows in set (0.00 sec)

LAST_INSERT_ID()函数可以获取到最后插入表中的自增列的值,但该函数只与服务器的本次会话过程中生成的值有关。
如果在与服务器的本次会话中尚未生成AUTO_INCREMENT值,则该函数返回0。

 

SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                3 |
+------------------+
1 row in set (0.00 sec)


默认情况下,序列从1开始,但是我们可以进行设置:

 

DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (ID),
    NAME VARCHAR(30) NOT NULL,
    REMARK VARCHAR(30)
)AUTO_INCREMENT = 10001;


如果表已经创建,可以使用下面的语句设置AUTO_INCREMENT的起始值,但是已经插入的数据序列值不会被改变:

 

ALTER TABLE TEST AUTO_INCREMENT = 10001;


当我们删除了数据表中的多条记录,并希望对剩下的数据的AUTO_INCREMENT列进行重新排列,那么我们只能通过删除自增的列,然后重新添加来实现。

不过在删除的同事不能添加新记录,否则会出现数据混乱。

ALTER TABLE TEST DROP ID;
ALTER TABLE TEST 
    ADD ID INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, 
    AUTO_INCREMENT = 30001, 
    ADD PRIMARY KEY (ID);

 

你可能感兴趣的:(mysql)