标签:事务 数据库 并发 提交 显式 employee 机制 隐式
一.事务
什么是事务???
事务就相当于一个盛放sql的容器
事务中的sql要么全部执行成功,要么所有已经修改的操作都回滚到原来的状态,即一条sql也别想执行成功
为何要用事务???
为了保证数据的安全,一致性
事务有四大特征:
1.原子性
2.一致性
3.隔离性
4.持久性:commit成功之后,就无法回滚了
start tranction——>开启事务
update employee set age=age+1 where name ='egon'
savepoint one——>设置保存点,少用
commit————>提交之后操作不能回滚,提交之前rollback回滚操作
事务运行的三种模式:
show variables like "autocommit":查看事务级别
set autommit = 0:设置事务级别
自动提交事务(隐式开启,隐式提交)
隐式事务(隐式开启,显式提交)
显式事务(显式开启,显式提交)
事务的使用原则:
1.保持事务短小
2.尽量避免事务中rollback
3.尽量避免savepoint
4.显示声明打开事务
5.默认情况下,依赖于悲观锁,为吞吐量要求苛刻的事务考虑乐观锁
6.锁的行越少越好,锁的时间越短越好
二.数据库读现象——>在并发场景下,数据不安全的一种体现
读现象——>在高并发情况下,即多个并发的事务同时操作一份数据,在没有加锁处理的情况下,会引发一些奇怪的读现象
脏读:一个事务读取了其它事务还没有提交的数据,读到的是其它事务"更新"的数据
不可重复读:一个事务多次读取,结果不一样
幻读:一个事务读取了其它事务还没有提交的事务,只是读取的是其它事务"插入"的数据
三.锁介绍
什么是锁???
锁是一种保障数据的机制
为何要用锁???
以互斥锁为例,让多个并发的任务同一时间只有一个运行(注意这不是串行),牺牲效率从而保障数据安全
总锁的优缺点:
优点:保障并发场景下的数据安全
缺点:降低了效率
所以我们在使用锁时应该尽可能缩小锁的范围,即锁住的数据越少越好,并发能力越高
锁的分类:
按照粒度:行级锁,表级锁,页级锁
按照级别:共享锁,排他锁
按照使用方式:乐观锁,悲观锁
表锁:
lock table employee write:只有自己的事务有读写,其它事务无法读写
lock table employee read:所有事务都能读,但不能写
unlock tables:解锁
行锁:
select * from employee where id=1 for update:update,delete,insert等写操作事务默认是加了排他锁,保证写数据安全,本事务可以写其它事务不能写
select * from employee where id=1 lock in share mode:保证读数据一致性,加了共享锁后,其它事务只能加共享锁或不加锁
标签:事务,数据库,并发,提交,显式,employee,机制,隐式 来源: https://www.cnblogs.com/wxd131488/p/16246271.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。