使用MYSQL中的自增字段
通过给字段添加 AUTO_INCREMENT 属性来实现主键自增长。语法格式如下:
字段名 数据类型 AUTO_INCREMENT
- 默认情况下,AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1。
- 一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(可以为主键,也可以不为主键)。
- AUTO_INCREMENT 约束的字段必须具备 NOT NULL 属性。
- AUTO_INCREMENT 约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等)。
- AUTO_INCREMENT 约束字段的最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT 就会失效。
SQL语句
这里是在原表的基础上添加新增的自增字段
- 添加字段
ALTER TABLE table_name ADD serial_numbering INT NULL COMMENT '自增排序字段';
- 创建唯一索引,因为本字段不是主键,所以需要创建唯一索引
CREATE UNIQUE INDEX table_name_serial_numbering_IDX USING BTREE ON table_name (serial_numbering DESC);
- 修改字段为自增,不为NULL
ALTER TABLE table_name MODIFY COLUMN serial_numbering int(11) auto_increment NOT NULL COMMENT '自增排序字段';
删除本字段的时候需要先清除字段的自增属性,否则删除字段会报错
自增设置
获取表名为 table_name 的当前 AUTO_INCREMENT 值
select table_name, AUTO_INCREMENT from information_schema.tables where table_name="table_name";
修改表名为 table_name 的 AUTO_INCREMENT 值
ALTER TABLE table_name AUTO_INCREMENT = number ;
补充
因为自增字段是项目运行之后在添加的,导致前期的数据中自增字段为空,需要对字段中数据进行添加
1、创建一个属于自己的自增序列临时表
CREATE TABLE `sequence` (
`name` varchar(50) NOT NULL,
`current_value` bigint(20) unsigned NOT NULL DEFAULT '0',
`increment` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2、添加方法
CREATE FUNCTION nextNum (seq_name VARCHAR(50))
RETURNS BIGINT
BEGIN
DECLARE value BIGINT;
UPDATE sequence SET current_value = current_value + increment WHERE upper(name) = upper(seq_name); -- 大小写不区分.
SELECT current_value INTO value FROM sequence WHERE upper(name) = upper(seq_name);
RETURN value;
END;
此方法用于修改临时序列表中的数据
3、初始话临时序列表
insert into `sequence` value('myseq',1,1);
4、查看效果
select nextNum('myseq') ;
5、修改旧数据
update ec_order set serial_numbering = nextNum('myseq') order by create_date asc;
按照时间的顺序修改序号
此种修改方式是严格按照自增的方式修改数据,但是会造成一定的性能影响,请注意实际情况