社区
教程
Wiki
注册
登录
创作新主题
社区所有版块导航
Python
python开源
Django
Python
DjangoApp
pycharm
DATA
docker
Elasticsearch
分享
问与答
闲聊
招聘
翻译
创业
分享发现
分享创造
求职
区块链
支付之战
aigc
aigc
chatgpt
WEB开发
linux
MongoDB
Redis
DATABASE
NGINX
其他Web框架
web工具
zookeeper
tornado
NoSql
Bootstrap
js
peewee
Git
bottle
IE
MQ
Jquery
机器学习
机器学习算法
Python88.com
反馈
公告
社区推广
产品
短视频
印度
印度
一周十大热门主题
飒视频 | ChatGPT给你写的“调查报告”,可能不属于你
【Ludic:轻量Python框架,类似于 React,使用组件-20240322132157
写给不会代码的你:20分钟上手 Python + AI
类ChatGPT平台Cohere正融资5亿美元,估值50亿美元
本周github最火的开源项目是这个!!!
Python编程的终极十大工具
GitHub(微博搜索)-20240324-1
GPT-4「荣升」AI顶会同行评审专家?斯坦福最新研究:ICLR/NeurIPS等竟有16.9%评审...
Stability AI CEO宣布辞职;消息称OpenAI将与好莱坞电影公司会面并推荐Sora丨A...
内容整理人员招募|数据湖、大模型、推荐、图机器学习等
关注
Py学习
»
DATABASE
MySQL主键
慧鑫coming
• 5 年前 • 177 次点击
不同引擎主键自增值的保存
MyISAM引擎的自增值保存在数据文件中。
InnoDB,MySQL5.7及以前的版本,保存在内存里(没有持久化,MySQL重启后不会记录之前的值,而是找当前最大的id值+1);MySQL8.0版本后,保存在redo log中,有恢复能力。
字段定义为AUTO_INCREMENT的行为
如果插入的数据字段为
0,null或未指定值
,那么就把这个表当前的AUTO_INCREMENT值填到自增字段。
如果插入数据时指定了字段具体的值,就直接使用指定的值。
1、如果
要插入的值<当前的自增值
,那么这个表的自增值(AUTO_INCREMENT)不变。
2、如果
要插入的值>=当前自增值
,把当前的自增值修改为新的自增值。
新的自增值生成算法
从
auto_increament_offset
开始,以
auto_increment_increment
为步长,持续叠加,直到找到第一个大于要插入值的值,作为新的自增值。
auto_increment_offset
表示
初始值
,
auto_increment_increment
表示
步长
,默认值都是1。
在
初始值
和
步长
都是1的情况下,新的自增值生成逻辑:
1、
要插入的值
>=
当前的自增值
,新的自增值就是
要插入的值+1
。
2、否则,自增值不变。
某些场景下
初始值
和
步长
不全是默认配置。比如
双M的主备结构要求双写
的时候,就可能将步长设置为2,让一个库的自增id是奇数,另一个库的自增id是偶数,避免两个库生成的主键发生冲突。
可能导致自增值不连续的原因
数据插入操作出现
Duplicate key error
后。
事务回滚
后。
Python社区是高质量的Python/Django开发社区
本文地址:
http://www.python88.com/topic/29130
177 次点击
登录后回复