mysql小记--基础知识
一、事务
二、事务的隔离级别
创建表
CREATE TABLE `class_teacher` (
`id` int() NOT NULL AUTO_INCREMENT,
`class_name` varchar() DEFAULT NULL,
`teacher_id` int() NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_teacher_id` (`teacher_id`)
) ENGINE=InnoDB; 插入数据
insert into class_teacher(class_name, teacher_id) values('class301', ),('class201', ); 根据二级索引进行更新(update或delete),之后进行插入[数据库隔离级别:REPEATABLE-READ]
)、
事务0: update class_teacher set class_name='class202' where teacher_id=; 事务1:insert into class_teacher(class_name,teacher_id) values('class229', );
[插入OK]
事务2:insert into class_teacher(class_name,teacher_id) values('class230', );
[插入WAIT]
事务3:insert into class_teacher(class_name,teacher_id) values('class231', );
[插入WAIT]
事务4:insert into class_teacher(class_name,teacher_id) values('class232', );
[插入WAIT]
事务5:insert into class_teacher(class_name,teacher_id) values('class250', );
[插入WAIT] 结论:
锁定[,无穷大) )、
事务0: update class_teacher set class_name='class202' where teacher_id=; 事务1:insert into class_teacher(class_name,teacher_id) values('class210', );
[插入WAIT]
事务2:insert into class_teacher(class_name,teacher_id) values('class220', );
[插入WAIT]
事务3:insert into class_teacher(class_name,teacher_id) values('class230', );
[插入WAIT]
事务4:insert into class_teacher(class_name,teacher_id) values('class250', );
[插入OK]
事务5:insert into class_teacher(class_name,teacher_id) values('class260', );
[插入OK] 结论:
锁定(无穷小,) )、
事务0: update class_teacher set class_name='class202' where teacher_id=; 事务1:insert into class_teacher(class_name,teacher_id) values('class240', );
[插入WAIT]
事务2:insert into class_teacher(class_name,teacher_id) values('class250', );
[插入WAIT]
事务3:insert into class_teacher(class_name,teacher_id) values('class260', );
[插入WAIT]
事务4:insert into class_teacher(class_name,teacher_id) values('class215', );
[插入WAIT]
事务5:insert into class_teacher(class_name,teacher_id) values('class229', );
[插入WAIT]
事务6:insert into class_teacher(class_name,teacher_id) values('class230', );
[插入OK]
事务7:insert into class_teacher(class_name,teacher_id) values('class231', );
[插入OK] 结论:
锁定(无穷小,]和[,) )、
事务0:update class_teacher set class_name='class202' where teacher_id=; 事务1:insert into class_teacher(class_name,teacher_id) values('class240', );
[插入OK]
事务2:insert into class_teacher(class_name,teacher_id) values('class250', );
[插入WAIT]
事务3:insert into class_teacher(class_name,teacher_id) values('class260', );
[插入WAIT]
事务4:insert into class_teacher(class_name,teacher_id) values('class215', );
[插入WAIT]
事务5:insert into class_teacher(class_name,teacher_id) values('class229', );
[插入WAIT]
事务6:insert into class_teacher(class_name,teacher_id) values('class230', );
[插入WAIT]
事务7:insert into class_teacher(class_name,teacher_id) values('class231', );
[插入WAIT]
事务8:insert into class_teacher(class_name,teacher_id) values('class250', );
[插入WAIT] 结论:
锁定(,]和[,无穷大) )、
事务0: update class_teacher set class_name='class202' where teacher_id=; 事务1:insert into class_teacher(class_name,teacher_id) values('class240', );
[插入OK]
事务2:insert into class_teacher(class_name,teacher_id) values('class250', );
[插入WAIT]
事务3:insert into class_teacher(class_name,teacher_id) values('class260', );
[插入WAIT]
事务4:insert into class_teacher(class_name,teacher_id) values('class215', );
[插入WAIT]
事务5:insert into class_teacher(class_name,teacher_id) values('class229', );
[插入WAIT]
事务6:insert into class_teacher(class_name,teacher_id) values('class230', );
[插入OK]
事务7:insert into class_teacher(class_name,teacher_id) values('class231', );
[插入OK] 结论:
锁定[,)
总结:当是根据二级索引进行更新,如update或delete时,在当前隔离级别下,其都会使用Next-Key锁[a,b)[行锁 + gap锁]前闭后开的,无法进行插入。
备注:
Repeatable Read,当使用非索引字段进行更新时,则会进行表锁。
Read Uncommitted,数据库一般不用,且在其上的任何操作都不会加锁。
Read Committed,有Record锁,没有Next-Key锁,即Next-Key锁变成了Record锁。
mysql小记--基础知识的更多相关文章
- MySQL数据库基础知识及优化
MySQL数据库基础知识及优化必会的知识点,你掌握了多少? 推荐阅读: 这些必会的计算机网络知识点你都掌握了吗 关于数据库事务和锁的必会知识点,你掌握了多少? 关于数据库索引,必须掌握的知识点 目录 ...
- Mysql之基础知识笔记
Mysql数据库基础知识个人笔记 连接本地数据库: mysql -h localhost -u root -p 回车输入数据库密码 数据库的基础操作: 查看当前所有的数据库:show database ...
- 阿里面试官必问的12个MySQL数据库基础知识,哪些你还不知道?
数据库基础知识 1.为什么要使用数据库 (1)数据保存在内存 优点: 存取速度快 缺点: 数据不能永久保存 (2)数据保存在文件 优点: 数据永久保存 缺点: 1)速度比内存操作慢,频繁的IO操作. ...
- MySQL:基础知识
基础知识 一.软件的生命周期 软件定义 软件开发 软件使用与维护 二.数据(Data) 1.定义 描述客观事物特征或性质的某种符号,经过数字化处理存储在计算机 2.数据独立性 物理独立性:指用户的应用 ...
- MySQL学习基础知识1
什么是数据库? 数据库就是存储数据的仓库. 存储方式: 变量 无法永久存储 文件处理,可以永久存储,弊端:文件只能在自己的计算机读写,无法被分享(局域网除外) 数据库分类: 1.关系型数据库 提供某种 ...
- [mysql]数据库基础知识
数据库管理系统DBMS 软件 bin config db (保存数据) 写程序: 数据库在本地 找到目录 添加数据 数据库在远程 socket连接上远程机器 socket发送命令 需要做的事情 程序 ...
- MySQL学习基础知识2
1.基础语句 查 select(* | 字段名 | 四则运算 | 聚合函数) from 表名称; 加上as取别名 as可省略 如:select name, (math+english)/2 total ...
- Java基础86 MySQL数据库基础知识
本文知识点(目录): 1.MySQL数据库的概述 2.MySQL数据库的管理[对数据库的操作](查询.删除.创建数据库,以及查询和修改数据库的编码模式) 3.表的管理[对数据库 表的操作] ...
- python week09 Mysql 数据库基础知识
第一篇:初识数据库 注:<基础概念,不再赘述,点开链接查看> 第二篇:库相关操作 一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些 ...
随机推荐
- [WinForm]TextBox只能输入数字或者正浮点型数字
关键代码: /// <summary> /// 只能输入数字[KeyPress事件] /// </summary> /// <param name="textB ...
- 如何通过jquery隐藏和显示元素
以下几种方式可以隐藏一个元素:1,CSS display的值是none.2,type="hidden"的表单元素.3,宽度和高度都显式设置为0.4,一个祖先元素是隐藏的,该元素是不 ...
- IOS_修改项目模板
1. /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/Source/Cocoa\ ...
- iis 下的 selfssl
当然,如果你想省掉所有这些麻烦也行,最简单的在IIS启动SSL的方法只要3步: 1. 下载 IIS 6.0 Resource Kit Tools: http://www.microsoft.com/d ...
- Winform Krypton控件使用(一)
在学生健康系统中前期考虑需求中,考虑过在C/S下使用Winform或WPF完成项目, 在winform下,考虑过两套插件,一个是DotNetBar, 控件很多,但这个是收费的,考虑到以后的版权和费用问 ...
- 浅谈 WPF控件
首先我们必须知道在WPF中,控件通常被描述为和用户交互的元素,也就是能够接收焦点并响应键盘.鼠标输入的元素.我们可以把控件想象成一个容器,容器里装的东西就是它的内容.控件的内容可以是数据,也可以是控件 ...
- 1102. Invert a Binary Tree (25)
The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...
- 项目文件包含 ToolsVersion="12.0" 设置,而此版本的 MSBuild 不支持该工具版本
解决方法: 右键点击你的项目,选择属性,再点击配置属性中的常规,常规中有个平台工作集,把V120改成V100,点击应用即可.
- 使用ab测试工具 进行并发测试
ab.exe -n1000 -c100 http://localhost:8067/api/todo/555e95feb301baa678141148 http://www.cnblogs.com/y ...
- Daject初探之Record模型
上一篇博文我简单介绍了Daject以及Daject的Table模型,Table模型是对一张数据表的抽象,从数据表的级别处理数据,而Record模型是对单条数据记录的抽象,从记录的级别处理数据. 这一篇 ...