首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL 核心模块揭秘 | 32 期 | 插入记录,主键索引冲突什么锁?

    本文基于 MySQL 8.0.32 源码,存储引擎为 InnoDB。 正文 1....原理分析 insert 语句执行过程中,插入记录到主键索引之前,需要先找插入记录的目标位置。 目标位置为表中主键字段值小于等于新插入记录中主键字段值的最后一条记录之后。...为了防止其它事务更新或者删除这条记录,检查表中记录是否有效之前,InnoDB 会对这条记录共享普通记录锁。 这就是示例 SQL 执行过程中对 的记录共享普通记录锁的原因。...我们可以模拟下这个场景,创建 2 个 MySQL 连接,分别执行 delete 语句和 insert 语句。...事务 247916 想要对 的记录共享普通记录锁被阻塞,进入等待状态。 4. 总结 没有需要总结的内容了。

    5010

    淘宝数据库,主键如何设计的?(文末福利)

    聊一个实际问题:淘宝的数据库,主键是如何设计的? 某些错的离谱的答案还在网上年复一年的流传着,甚至还成为了所谓的MySQL军规。其中,一个最明显的错误就是关于MySQL主键设计。...mysql> CREATE TABLE membermaster -> ( -> cardno CHAR(8) PRIMARY KEY, -- 会员卡号为主键 -> membername varchar...比如,我们有一个销售流水表(trans),记录了所有的销售流水明细。2020 年 12 月 01 日,张三在门店购买了一本书,消费了 89 元。...那么,系统中就有了张三买书的流水记录,如下所示: image-20230705100408722 接着,我们查询一下 2020 年 12 月 01 日的会员销售记录: mysql> SELECT b.membername...门店在添加会员的时候,先到总部 MySQL 数据库中获取这个最大值,在这个基础上 1,然后用这个值作为新会员的“id”,同时,更新总部 MySQL 数据库管理信息表中的当 前会员编号的最大值。

    41030

    流水号当主键不正好么?”

    前言 " 又要开始新项目了,一顿操作猛如虎,梳理流程画图。这不,开始对流程及表结构了。 我:吧啦吧啦吧啦 …… 老大:这个建表为啥还设置个自增 id ?...老大:流水号在你这是唯一索引吧?设置成主键,这样就不用 id 了,还减少一次回表查询? 我:…… (说的好像很有道理,咱也不敢说话。)...MySQL 自增主键而不是使用业务生成的值当做主键。...一般使用手机号、身份证号作为主键等并不能保证顺序性。 流水号一般相对较长,比如 28 位,32 位等,过长的话会二级索引占用空间较多。同时为了业务需求,流水号具有一定的随机性。...相关资料 [1] MySQL 官方文档: https://dev.mysql.com/doc/refman/8.0/en/ [2] 《MySQL 技术内幕 InnoDB 存储引擎》第二版

    1.9K20

    MySQL数据库】数据库的约束

    ​ 目录Mysql约束(constraint)基本介绍主键约束(primary key)自增长约束(auto_increment)非空约束(not null)唯一性约束(unique)默认约束(default...)零填充约束(zerofill)----图片Mysql约束(constraint)基本介绍 MySQL数据库通过约束(constraints)防止无效的数据进入到数据库中,以保护数据的实体完整性...MySQL中主要有六种约束,分别是:主键约束(primary key),非空约束(not null),自增长约束(auto_increment),默认约束(default) ,零填充约束(zerofill...2.一张表只能有一个主键,联合主键也是一个主键自增长约束(auto_increment) 默认情况下,自增长约束(auto_increment)的初始值是 1,每新增一条记录,字段值自动...当使用zerofill 时,默认会自动unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128~+127,无符号为0~256。

    5.7K40

    推荐学Java——数据表操作

    约束分类 主键约束:primary key 单一主键:一个字段做主键 复合主键:多个字段联合做主键(不建议使用) 主键值类型建议 int bigint char 不建议使用 varchar ,主键一般都是定长的...mySQL日期格式: %Y年 %m 月 %d 日 %h 时 %m 分 %s 秒 str_to_date('日期字符串','日期格式') 比如数据表中员工的入职日期字段 hiredate 的类型是...mysql的标准日期格式存入的,那么查询的时候如果没有特殊要求,可以直接查询。...也可以给列名别名,像下面这样 select 表名的别名.列名1 列名1的别名,表名的别名.列名2 列名2的别名 from 表名 表名的别名; 去重查询 // 查询表中某列数据,并去掉重复值...where pname like '%_%'; 如果要查询的列名中本身有_,那么要把列名中带有_的所有记录查出来,这个时候需要用到转义符号 \ 在某个范围获得值:in // 查出商品编号为

    2.6K20

    流水号当主键不正好么?”

    前言 " 又要开始新项目了,一顿操作猛如虎,梳理流程画图。这不,开始对流程及表结构了。 我:吧啦吧啦吧啦 …… 老大:这个建表为啥还设置个自增 id ?...老大:流水号在你这是唯一索引吧?设置成主键,这样就不用 id 了,还减少一次回表查询? 我:…… (说的好像很有道理,咱也不敢说话。)...MySQL 自增主键而不是使用业务生成的值当做主键。...一般使用手机号、身份证号作为主键等并不能保证顺序性。 流水号一般相对较长,比如 28 位,32 位等,过长的话会二级索引占用空间较多。同时为了业务需求,流水号具有一定的随机性。...相关资料 [1] MySQL 官方文档: https://dev.mysql.com/doc/refman/8.0/en/ [2] 《MySQL 技术内幕 InnoDB 存储引擎》第二版 - <End

    83230

    DML和DQL

    studentName`as 学生姓名 ,`address` as 学生地址 from `student` where `address` '河南新乡';/*学生地址不等于河南新乡的所有学生*/ /*直接空格后*...数据库 LOWER(str) 将字符串转为小写 SELECT LOWER('MySQL'); 返回:mysql UPPER(str) 将字符串转为大写 SELECT UPPER('MySQL');  返回...创建myschool数据库*/ create database myschool; /*删除数据库myschool*/ drop database myschool; /*删除student表里的主键...`as 学生姓名 ,`address` as 学生地址 from `student` where `address` '河南新乡';/*学生地址不等于河南新乡的所有学生*/ /*直接空格后*...studentName`as 姓名,`address` as 学生地址,'昆明华信' as 学校名称 from `student`; select * from `student`; /*把成绩都降低10%后5

    89310

    每天一道大厂SQL题【Day11】微众银行真题实战(一)

    第11题:授信金额统计 需求列表 笔试题目 说明:SQL语法请使用HiveSQL/SparkSQL 1.基于附录《核额流水表》和附录2《借据表》统计下述指标,请提供统计SQL 指标 当日新增 昨日新增...技术群讨论 点击下方卡片关注 联系我进群 或者直接私信我进群 微众银行源数据表附录: 核额流水表 字段名 字段意义 字段类型 ds 日期分区,样例格式为20200101,每个分区有全量流水 string...sno 每个ds内主键流水号 string uid 户id string is_risk_apply 是否核额申请(核额漏斗第一步)取值0和1 bigint is_pass_rule 是否通过规则(...,样例格式为20200101每个分区有全量借据 strng duebilid 借据号(每个日期分区内的主键) strng uid 用户id string prod_type 产品名称仅3个枚举值XX...,样例格式为20200101增量表部分流水记录可能有更新 strng sno 流水号,主键 strng create time 创建日期样例格式为2020-10-10 00:10:30与sno唯一绑定,

    75020

    必要商城MySQL开发规范

    保留关键字; 临时库、临时表名必须以tmp为前缀并以日期为后缀; 备份库、备份表名必须以bak为前缀并以日期为后缀; 二、基本规范 使用INNODB存储引擎 5.5版本以后的默认引擘...且管理维护成本较高 拆分大字段和访问频率低的字段,分离冷热数据 用HASH进行散表,表名后缀使用十进制数,下标从0开始 首次分表尽量多的分,避免二次分表,二次分表的难度和成本较高 按日期时间分表需符合...对前10个字符进行索引能够节省大量索引空间,也可能会使查询更快 表必须有主键 不使用更新频繁地列作为主键 尽量不选择字符串列作为主键 不使用UUID、MD5、HASH作为主键...如tinyint有符号为-128-127,无符号为0-255 INT类型固定占用4个字节存储 使用TIMESTAMP存储时间 因为TIMESTAMP使用4字节,DATETIME使用8个字节...最擅长的是单表的主键/二级索引查询 Join消耗较多的内存,产生临时表 避免在数据库中进行数学运算 容易将业务逻辑和DB耦合在一起 MySQL不擅长数学运算和逻辑判断 无法使用索引

    67610

    每天一道大厂SQL题【Day13】微众银行真题实战(三)

    ', sno comment '流水号', uid comment '用户id', is_risk_apply comment '是否核额申请', is_pass_rule comment '是否通过规则...技术群讨论 点击下方卡片关注 联系我进群 或者直接私信我进群 微众银行源数据表附录: 核额流水表 字段名 字段意义 字段类型 ds 日期分区,样例格式为20200101,每个分区有全量流水 string...sno 每个ds内主键流水号 string uid 户id string is_risk_apply 是否核额申请(核额漏斗第一步)取值0和1 bigint is_pass_rule 是否通过规则(...,样例格式为20200101每个分区有全量借据 string duebilid 借据号(每个日期分区内的主键) string uid 用户id string prod_type 产品名称仅3个枚举值...,样例格式为20200101增量表部分流水记录可能有更新 string sno 流水号,主键 string create time 创建日期样例格式为2020-10-10 00:10:30与sno唯一绑定

    1.1K20

    MySQL开发规范

    保留关键字; 临时库、临时表名必须以tmp为前缀并以日期为后缀; 备份库、备份表名必须以bak为前缀并以日期为后缀; 二、基本规范 使用INNODB存储引擎 5.5版本以后的默认引擘...且管理维护成本较高 拆分大字段和访问频率低的字段,分离冷热数据 用HASH进行散表,表名后缀使用十进制数,下标从0开始 首次分表尽量多的分,避免二次分表,二次分表的难度和成本较高 按日期时间分表需符合...对前10个字符进行索引能够节省大量索引空间,也可能会使查询更快 表必须有主键 不使用更新频繁地列作为主键 尽量不选择字符串列作为主键 不使用UUID、MD5、HASH作为主键...如tinyint有符号为-128-127,无符号为0-255 INT类型固定占用4个字节存储 使用TIMESTAMP存储时间 因为TIMESTAMP使用4字节,DATETIME使用8个字节...最擅长的是单表的主键/二级索引查询 Join消耗较多的内存,产生临时表 避免在数据库中进行数学运算 容易将业务逻辑和DB耦合在一起 MySQL不擅长数学运算和逻辑判断 无法使用索引

    82810

    学习猿地 python教程 django教程1 初识Django

    数据类型:整型、浮点型、字符串、日期等 ------------------------------------ #### 1、字符串数据类型 最常用的数据类型是串数据类型。...回答:因为性能,MySQL处理定长列远比处理变长列快得多。 + Text  变长文本类型存储 ![image](....--- #### 3、日期和时间类型 MySQL使用专门的数据类型来存储日期和时间值 ![image](....    - char(5). varchar(7) 在字符类型后面限制 表示 字符串的长度   - int(4) 没有意义,默认无符号的int为int(11),有符号的int(10)   - int(...- auto_increment  定义列为自增属性,一般用于主键,数值会自动1 - unique 唯一索引(数据不能重复:用户名)可以增加查询速度,但是会降低插入和更新速度 --- ### 三、MySQL

    81120
    领券