在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

怎么理解mysql innodb

122次阅读
没有评论

共计 2323 个字符,预计需要花费 6 分钟才能阅读完成。

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

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 的与数据库行为”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计2323字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 免费观看国产一区二区三区 | 久久99热精品免费观看动漫 | 欧美一级α片毛片免费观看 | 婷婷综合另类小说色区 | 免费观看羞羞视频网站 | 亚洲视频二区 | 亚洲欧美日韩天堂 | 宝贝腿开大点我添添公视频免费 | 久久精品国产精品亚洲综合 | 日韩精品免费看 | 四虎影院免费在线播放 | 亚洲成av人片在一线观看 | 久久九九精品99国产精品 | 亚洲av成人片色在线观看高潮 | 边啃奶头边躁狠狠躁 | 6699嫩草久久久精品影院 | 久久久亚洲欧洲日产国码αv | 亚洲av第一页国产精品 | 精品久久九九 | 久久国产网站 | 草草草视频在线观看 | 少妇粉嫩小泬喷水视频www | 精品久久久久久中文字幕网 | 亚洲成人免费在线 | 开心五月色婷婷综合开心网 | 成人免费视频视频在线不卡 | 亚洲av无码成h人动漫在线观看 | 99热成人精品免费久久 | 亚洲国产精品视频 | 特级黄色大片 | 免费看成人播放毛片 | 国产午夜精品久久理论片 | 久久99精品久久久久久三级 | 亚洲爆乳精品无码一区二区 | 国产成人高清视频免费播放 | 少妇又紧又深又湿又爽视频 | 久久久久久九九精品久小说 | 国产妞干网 | 国产美女精品视频 | 欧美日韩国产一区三区 | 欧美一区二区三区激情 |