如何修改mysql主键的值为自增

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改mysql主键的值为自增相关的知识,希望对你有一定的参考价值。

-- 创建表
CREATE TABLE `t2` (
  `code` varchar(100) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 添加主键
ALTER TABLE `t2` ADD COLUMN `ID`  int(10) NOT NULL AUTO_INCREMENT AFTER `code`,ADD PRIMARY KEY (`id`)

参考技术A 列的自增属性,一般用来设置整数列根据一定步长逐步增长的值,类似于其他数据库的序列。不过这里的“序列”是基于特定一张表的。关于自增属性的相关特性如下:
1. 控制自增属性性能的变量:innodb_autoinc_lock_mode
innodb_autoinc_lock_mode=0
代表传统模式,也就是说,在对有自增属性的字段插入记录时,会持续持有一个表级别的自增锁,直到语句执行结束为止。比如说下面两条语句,SQL 1 在执行期间,一直持有对表 f1 的表级自增锁,接下来 SQL 2 执行时锁超时。
innodb_autoinc_lock_mode=1
代表连续模式,和传统模式差不多,不同的点在于对于简单的插入语句,比如 SQL 2,只在分配新的 ID 过程中持有一个轻量级的互斥锁(线程级别,而不是事务级别),而不是直到语句结束才释放的表锁。
代表交错模式。这个模式下放弃了自增表锁,产生的值会不连续。不过这是性能最高的模式,多条插入语句可以并发执行。mysql 8.0 默认就是交错模式。
那针对复制安全来说,以上三种模式,0 和 1 对语句级别安全,也就是产生的二进制日志复制到任何其他机器都数据都一致;2 对于语句级别不安全;三种模式对二进制日志格式为行的都安全。
2. 控制自增属性的步长以及偏移量
一般用在主主复制架构或者多源复制架构里,主动规避主键冲突。
auto_increment_increment 控制步长
auto_increment_offset 控制偏移量
3. 对于要立刻获取插入值的需求
就是说要获取一张表任何时候的最大值,应该时刻执行以下 SQL 3 ,而不是 SQL 2。SQL 2 里的函数 last_insert_id() 只获取上一条语句最开始的 ID,只适合简单的 INSERT。
4. 自增列溢出现象
自增属性的列如果到了此列数据类型的最大值,会发生值溢出。比如变更表 f1 的自增属性列为 tinyint。

如何获取数据表中自增主键的值

一、MySql数据库

  当向数据库中插入一条数据的时候,默认是拿不到自增主键的值的, 需要设置如下两个属性才可以拿到主键值!

  设置userGeneratedKeys属性值为true:使用自动增长的主键。使用keyProperty设置把主键值设置给哪一个属性

1   <insert id="addEmp" parameterType="com.neuedu.mybatis.bean.Employee" useGeneratedKeys="true" keyProperty="id" databaseId="mysql">
2     insert into tbl_employee(last_name,email,gender) 
3     values(#{lastName},#{gender},#{email})
4   </insert>

二、Oracle数据库

  1、需要在oracle数据库中创建自增序列

      create sequence emp_seq
      start with 1;

   2、在sql映射文件中配置:

      order="BEFORE" :设置selectKey中包含的语句先执行

      resultType:指定返回类型

      keyProperty:将返回值赋值给指定的列

1   <!-- Oracle数据库获取主键自增 -->
2   <insert id="insert" databaseId="oracle">
3     <selectKey keyProperty="id" resultType="int" order="before">
4       select emp_seq.nextval from dual
5     </selectKey>
6     insert into tbl_emp values(#{id},#{lastName},#{gender},#{email})
7   </insert>

 



以上是关于如何修改mysql主键的值为自增的主要内容,如果未能解决你的问题,请参考以下文章

如何获取数据表中自增主键的值

mybatis记录随便保存数据获取自增主键的值

Mybatis返回自增主键的xml方式

Navicat For SQL Server 修改字段为自增主键

mysql自增主键怎么用

mysql自增主键怎么用