本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • MySQL基础教程(9)MySQL事务与锁

MySQL基础教程(9)MySQL事务与锁

发布:TangLu2020-1-4 11:38分类: MySQL 标签: mysql

一、MySQL事务

1、数据库事务必须同时满足原子性、一致性、隔离性和持久性四个特性:

原子性:事务开始后所有操作要么全部执行,要么全部不执行。如果事务执行过程中出错会回滚到事务开始前的状态。

一致性:事务开始前和结束后,完整性约束没有被破坏。比如A向B转账1000,不应存在A扣除1000后而B没有增加的情况。

隔离性:同一个时间内只允许一个事务对同一个数据进行处理,不同事务之间彼此不能有干扰。 

持久性:事务完成后,更新将保存到数据库中。


2、数据库事务隔离级别

可重复读(repeatable read):在同个事务中,读取同一份数据,其结果总是相同的。Innodb引擎默认隔离级别。

读未提交(read uncommitted):最低的隔离级别,一个事务可以读取到另一个事务未提交的结果,不建议使用

读已提交(read commited):只有事务提交后,其更新结果才可以被其他事务查询。Oracle、SQL Server默认隔离级别,建议使用

串行化(serializable):事务串行化处理,隔离级别最高,但性能最差,可以解决并发事务的所有问题


3、MySQL事务隔离级别的查看

show global variables like 'tx_isolation';


4、设置MySQL事务隔离级别

set global tx_isolation='READ-COMMITTED'

vi /etc/my.cnf
tx_isolation=READ-COMMITTED'


5、如何提交事务

start transaction | begin ;  #放在SQL开始用来声明要提交事务
rollback  #放在SQL最后,可以回滚所有事务
commit #放在SQL最后代表提交事务



二、MySQL锁

1、锁的分类与区别

表锁:锁定整张表,开销小,加锁快,不会出现死锁,但是发生冲突概率高,并发低。适用于查询为主、少量更新的应用,如WEB应用。

行锁:锁定需要的行,开销大,加锁慢,会出现死锁,冲突概率低,并发度高。适合于一些在线事务处理系统

页锁:介于表锁和行锁之间,会出现死锁


2、死锁相关参数

innodb_print_all_deadlocks=on:将死锁记录到错误日志中

innodb_lock_wait_timeout=50:锁超时时间,默认是50秒

innodb_deadlock_detect=on:开启死锁检查,数据库遇到死锁会自动回滚

innodb_status_output_locks=on:默认关闭,

innodb_

innodb_

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《MySQL基础教程(9)MySQL事务与锁
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-560.html  [生成短网址]

已有 0/24 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~