加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL教程Mysql 主键自增长auto_increment问题分析

发布时间:2020-12-12 02:26:11 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL教程Mysql 主键自增长auto_increment问题分析》要点: 本文介绍了MYSQL教程Mysql 主键自增长auto_increment问题分析,希望对您有用。如果有疑问,可以联系我们。 导读:本节内容:Mysql 主键自增长在mysql数据库中,主键由auto_increment实现自增长,若

《MYSQL教程Mysql 主键自增长auto_increment问题分析》要点:
本文介绍了MYSQL教程Mysql 主键自增长auto_increment问题分析,希望对您有用。如果有疑问,可以联系我们。

导读:本节内容:Mysql 主键自增长在mysql数据库中,主键由auto_increment实现自增长,若自定义函数来表示auto_increment的话可以如下: create f...

本节内容:
Mysql 主键自增长MYSQL教程

在mysql数据库中,若自定义函数来表示auto_increment的话可以如下:
?MYSQL教程

create function select_autoincrement_id() returns int(11)
begin
select max(id)+1 from table_name;
end

但是,此办法会有并发方面的问题,如两个事务中就可能获取到同一个id而其中一个失败,所以需要锁表:
?MYSQL教程

create function select_autoincrement_id() returns int(11)
begin
select max(id)+1 from table_name for update;
end

以上办法,可以实现一些复杂的自增长逻辑要求,比如在一个复合主键中,要求以其中一个主键为参照物,另一个主键重新从1开始自增长,但缺点是需要锁表,在大并发环境中会影响一定的效率,在mysql 5.1.22版本之前,均是需要锁表的,但在5.1.22版本之后,引入了一种新的办法来解决自增长的效率问题:
?MYSQL教程

innodb_autoinc_lock_mode = 0(全部使用表锁)
innodb_autoinc_lock_mode = 1(默认,可预判行数时使用新方式,不可时使用表锁)
innodb_autoinc_lock_mode = 2(全部使用新方式)

说明:
在级别1中,引入了一个轻量级的互斥量,在不同的事务中auto_increment总是可以获取到最新的自增长主键值而不需要锁表.
但对于无法提前获知插入行数的sql依然需要锁表,如insert...select... replace...select... load data 还是使用表锁.MYSQL教程

有关Mysql 主键自增长的问题,就介绍这些了,希望对大家有所赞助.MYSQL教程

欢迎参与《MYSQL教程Mysql 主键自增长auto_increment问题分析》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读