MYSQL的AUTO_INCREMENT简单使用

使用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语句

这里是在原表的基础上添加新增的自增字段

  1. 添加字段
ALTER TABLE table_name ADD serial_numbering INT NULL COMMENT '自增排序字段';
  1. 创建唯一索引,因为本字段不是主键,所以需要创建唯一索引
CREATE UNIQUE INDEX table_name_serial_numbering_IDX USING BTREE ON table_name (serial_numbering DESC);
  1. 修改字段为自增,不为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;

按照时间的顺序修改序号

此种修改方式是严格按照自增的方式修改数据,但是会造成一定的性能影响,请注意实际情况

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值