iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >怎么理解mysql innodb_autoinc_lock_mode的与数据库行为
  • 322
分享到

怎么理解mysql innodb_autoinc_lock_mode的与数据库行为

2024-04-02 19:04:59 322人浏览 安东尼
摘要

这篇文章主要介绍“怎么理解Mysql innodb_autoinc_lock_mode的与数据库行为”,在日常操作中,相信很多人在怎么理解mysql innodb_autoinc_lock_mode的与数据

这篇文章主要介绍“怎么理解Mysql innodb_autoinc_lock_mode的与数据库行为”,在日常操作中,相信很多人在怎么理解mysql innodb_autoinc_lock_mode的与数据库行为问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解mysql innodb_autoinc_lock_mode的与数据库行为”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

mysql 的auto_incremet 都知道了 

对应的还有一个这个行为的一个的类型的参数,对数据库的行为会有影响. 

innodb_autoinc_lock_mode  有3个取值 0 , 1 ,2 对应于 
“traditional”,“consecutive”, or “interleaved” lock mode

针对有3中行为: 

1. insert_like  语句 包括: insert ,  insert ... select,  replace ,replace ... select  已经 load data 语句. 

2.simple insert  语句:  insert , replace 这样. 

3.bulk insert  语句:  insert ...select , replace...select , load data.

4.mixed insert 语句: 例如 INSERT INTO t1 (c1,c2) VALUES (1,'a'), (NULL,'b'), (5,'c'), (NULL,'d'); 
           还有   INSERT ... ON DUPLICATE KEY UPDATE 这种语句. 

innodb_autoinc_lock_mode  取值为 0 : 

这个参数是从5.1 引入的, 对应于传统的模式.  对于insert like 语句这个auto_incremet  取得的是一个表级锁. 

持有锁的时间是到当前语句结束. 确保语句的写入是可以预见以及可以预测,可以重现的,也就是可以保证语句入库的数据时顺序的. 

对于使用statement fORMat 的 binlog 模式的复制,slave 跟主库同一行记录取得的值是一致. 

例如 : 
CREATE TABLE t1 (  c1 INT(11) NOT NULL AUTO_INCREMENT,  c2 VARCHAR(10) DEFAULT NULL,  PRIMARY KEY (c1)) ENGINE=InnoDB;

执行语句:
Tx1: INSERT INTO t1 (c2) SELECT 1000 rows from another table ...

Tx2: INSERT INTO t1 (c2) VALUES ('xxx');

 在statement 的复制中, 日志重演这个sql执行,是可以确保主从取得的值是一致的. 

tx1 执行的时候, 是可以保证 这1000笔记录是连续的取得 autoinc 字段的值, tx2 要等到tx1 执行完后才能拿到autoinc的值. 

这样限制了并发

innodb_autoinc_lock_mode 取值 1 : 

取值为1 为默认值. 

对于 bulk insert  语句.  每个语句只有这个锁到语句结束,但是每个语句持有这个锁只能执行一次. 

对于simple inset  语句是可预计的插入的值的数量,那么语句是可以不需要持有这个表级锁到语句结束. 而是更高级别的mutex 锁.

对于不可以预见插入数量的语句, 起行为跟bulk insert 是一样的,持有锁到语句结束,每次只能执行一次. 

对于mixed inset  数据库会分派多于插入插入数量的 autoinc 值 , 语句结束后,多余的值将丢弃, 这个时候, autoinc 字段的值可能不是连续的. 

innodb_autoinc_lock_mode  取值 2 : 

insert like 语句 可以持有这个表级锁,并执行相同的时间. 

这样对于statement based  复制来说, 在恢复的时候,结果就变得不确定了. 也就是可能主从库的autoinc 字段的值是不一致的. 

这样会对业务逻辑代理困扰. 

这种模式下,每个语句都可以几乎在同时产生autoinc值,这样每个语句的所取得的autoinc字段的值是不确定的.也不可预测. 

对于simple insert 如果在执行前 可以预测到要插入的值的数量,这个sql的数据获取的autoinc值是连续的.  否则就不一定是连续的. 

对于mixed insert 语句 取得autoinc字段的值是不可预测的. 

对于bulk insert 语句 取得autoinc 的值可能存在空缺 (gap)  即取得的值可能不是连续的. 

innodb_autoinc_lock_mode 的取值与复制的关系.

取值 0 跟 1  对复制来说都是安全的, 即可以保证主从数据库的值是一致的. 

如果却只为2  在 基于 statement based 复制来说,从库的数据时不确定的. 即不安全. 

对应 row based 或者 mixed based 的复制  从库的数据时确定跟主库一致的,是安全. 

可以看出在 取值2 的时候,可以获得更大的性能. 

另外如果指定了 autoinc字段的值 insert 可能会触发 key 冲突的 错误. 

如果insert 指定的值大于autoinc 字段的最大值, 其结果是不确定的. 

innodb_autoinc_lock_mode 取值为2的时候对于bulk insert 会产生空洞(gap)   同一个sql 写入数据库的值不一定是连续的. 

到此,关于“怎么理解mysql innodb_autoinc_lock_mode的与数据库行为”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么理解mysql innodb_autoinc_lock_mode的与数据库行为

本文链接: https://www.lsjlt.com/news/66920.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么理解mysql innodb_autoinc_lock_mode的与数据库行为
    这篇文章主要介绍“怎么理解mysql innodb_autoinc_lock_mode的与数据库行为”,在日常操作中,相信很多人在怎么理解mysql innodb_autoinc_lock_mode的与数据...
    99+
    2024-04-02
  • MySQL数据库回表与索引怎么理解
    本篇内容介绍了“MySQL数据库回表与索引怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!回表的概念...
    99+
    2024-04-02
  • 怎么理解数据库中的过程与函数
    这篇文章主要介绍“怎么理解数据库中的过程与函数”,在日常操作中,相信很多人在怎么理解数据库中的过程与函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解数据库中的过程与...
    99+
    2024-04-02
  • 如何进行MySQL数据库mysql-bin日志的管理与维护
    如何进行MySQL数据库mysql-bin日志的管理与维护,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Mysql中,如果启用mysql-b...
    99+
    2024-04-02
  • MySQL数据库datetime与LocalDateTime的映射与处理
    版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 背景概述 MySQL数据库中某字段为datetime类型;图示如下: 在ORM处理时,在Java中可使用LocalDateTime...
    99+
    2023-08-22
    mysql datetime LocalDateTime
  • MySQL数据库怎么进行优化
    这篇文章主要讲解了“MySQL数据库怎么进行优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库怎么进行优化”吧!  MySQL数据库怎么优化...
    99+
    2024-04-02
  • python怎么与mysql数据库交互
    本篇内容介绍了“python怎么与mysql数据库交互”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1、安装pymysql库  如果你想...
    99+
    2023-06-02
  • mysql怎么将已有的数据库拷贝为另一个数据库
    您可以使用MySQL的CREATE DATABASE和CREATE TABLE语句将已有的数据库和其表拷贝到另一个数据库中。下面是具体的步骤: 在MySQL客户端中,使用CREATE DATABAS...
    99+
    2023-08-31
    数据库 mysql sql
  • MySQL数据库中怎么处理重复的数据
    这篇文章将为大家详细讲解有关MySQL数据库中怎么处理重复的数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。方法一:防止出现重复数据也就是说我们再设计表的...
    99+
    2024-04-02
  • MySQL线上数据库怎么清理数据
    这篇文章将为大家详细讲解有关MySQL线上数据库怎么清理数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。01 场景分析 今天下午,开发的同事提来一个需求,需要在线上要删除一些数据记录,简单看了...
    99+
    2023-06-14
  • 一文理解MySQL数据库的约束与表的设计
    目录1.数据库约束1.1 约束类型1.2 null 约束1.3 unique 唯一的约束1.4 default 默认值约束1.5 primary key 主键约束1.6 primary key auto_incremen...
    99+
    2024-04-02
  • 怎么对MySQL数据库中表的数据进行更新
    小编给大家分享一下怎么对MySQL数据库中表的数据进行更新,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Update语句的基本语...
    99+
    2024-04-02
  • 【MySQL】使用DBeaver数据库管理工具进行MySQL数据库连接
    一、数据库连接信息填写 服务器地址:填写服务器部署的地址,以及端口号 2、数据库:sys 3、用户名:root 4、密码:服务器上面设置的具体密码 以上信息填写错误的报错提示:Access denie...
    99+
    2023-09-01
    数据库 mysql 服务器 db
  • MySQL怎么对数据库进行加密
    MySQL数据库本身并不提供加密功能,但可以通过以下方式对数据库进行加密: 使用加密函数:MySQL提供了一些加密函数,如AES...
    99+
    2024-04-02
  • mysql数据库怎么执行sql语句
    可以通过以下方法执行 mysql sql 语句:使用 mysql cli(命令行界面):登录数据库并输入 sql 语句。使用 mysql workbench:启动应用程序、连接数据库并执...
    99+
    2024-04-14
    mysql python sql语句
  • Python数据库怎么理解
    本篇内容主要讲解“Python数据库怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python数据库怎么理解”吧!用Python创建的Zope是开放源代码领域使用最广泛和最容易理解的内容...
    99+
    2023-06-17
  • mysql数据库怎么还原与备份
    这篇文章主要讲解了“mysql数据库怎么还原与备份”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql数据库怎么还原与备份”吧!现在开始讲述另一种数据库...
    99+
    2024-04-02
  • 怎么关联mysql数据库与网站
    关联mysql数据库与网站的示例:建立一个web项目。把数据库驱动复制到lib目录下,数据库驱动有:mysql、sqlserver、oracle等。编写一个连接数据库的工具类,获取一个连接。public class Da...
    99+
    2024-04-02
  • Oracle数据库中怎么实现数据行迁移与行链接
    本篇内容主要讲解“Oracle数据库中怎么实现数据行迁移与行链接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle数据库中怎么实现数据行迁移与行链接”吧...
    99+
    2024-04-02
  • 怎样进行mysql数据库的分析
    怎样进行mysql数据库的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、数据库是什么?数据库是管理数据的一类软件。对数据的管理体现在两个方面,第一是描述数据,即一条...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作