关于mysql 创建序列

关于mysql 创建序列,第1张

mysql下序列是用关键字auto_crement,起始值及步长增长值由系统以下参数确定:

mysql>show variables like '%auto_increment%'

+--------------------------+-------+

| Variable_name| Value |

+--------------------------+-------+

| auto_increment_increment | 1 |

| auto_increment_offset| 1 |

+--------------------------+-------+

2 rows in set (0.00 sec)

mysql>

其中auto_increment_offset表示起始值(且必须由1开始),参数表示auto_increment_increment表示步长增长值(只能是正整数)。

建表示例:

create table t111

(id int auto_increment primary key,

remark varchar(50)

)

由上面所说可知,你的需求在mysql下单用auto_crement是实现不了的。建议你考虑别的办法吧,或由一些变通的方式实现。

通过 AUTO_INCREMENT设置

SQL INSERT语句的时候,要避免 指定那个自增的字段.否则会发生主键的冲突。

通过 ALTER TABLE语句 可以修改 自增的数值, 但是只能增加,不能减少。

TRUNCATE TABLE 语句,会将自增ID重置为零。

mysql> CREATE TABLE test_create_tab2 (

    ->   id   INT  AUTO_INCREMENT,

    ->   val  VARCHAR(10),

    ->   PRIMARY KEY (id)

    -> )

Query OK, 0 rows affected (0.09 sec)

mysql> INSERT INTO test_create_tab2(val) VALUES ('NO id')

Query OK, 1 row affected (0.03 sec)

mysql> select last_insert_id() as id

+----+

| id |

+----+

|  1 |

+----+

1 row in set (0.00 sec)

mysql> INSERT INTO test_create_tab2(val) VALUES ('NO id 2')

Query OK, 1 row affected (0.03 sec)

mysql> select last_insert_id() as id

+----+

| id |

+----+

|  2 |

+----+

1 row in set (0.00 sec)

mysql> select * from test_create_tab2

+----+---------+

| id | val     |

+----+---------+

|  1 | NO id   |

|  2 | NO id 2 |

+----+---------+

2 rows in set (0.00 sec)

一、修改自增长序列的值

alter table table_name auto_increment=n

注意:n只能大于已有的auto_increment的整数值,小于的值无效.

show table status like 'table_name' 的返回结果里的auto_increment列就是表的现有值.

二、控制主键的起点

create table 表名

(

......

) engine=INNODB auto_increment=1001 default charset=gbk

三、自增主键归零

如果曾经的数据都不需要的话,可以直接清空所有数据,并将自增字段恢复从1开始计数

truncate table 表名

四、获取自增主键

通过SQL select LAST_INSERT_ID()函数

通过SQL @@IDENTITY 变量

五、说明

AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。

AUTO_INCREMENT数据列必须具备NOT NULL属性。

设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/7308703.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存