mysql的自动提交的设置

问题1 : 如何查看mysql的自动提交的设置?

select @@autocommit;
查看默认提交的状态是否是自动提交
在这里插入图片描述
0手动提交 1 自动提交

问题2 :怎么设置autocommit;

set @@autocommit=0;

设置的是本次mysql 窗口的自动提交取消,不影响别的连接的自动提交
查看怎么锁定了行锁的例子的演示
1 开启事务 未提交;
mysql的自动提交的设置_第1张图片
2 重新打开一个连接,更新锁定的行的内容 ,一直等待释放锁
mysql的自动提交的设置_第2张图片
3 第一个连接提交完,释放锁
在这里插入图片描述
4 第二次的跟新获得锁得以提交
在这里插入图片描述
5 如果长时间未获得锁,返回的错误超时
在这里插入图片描述

排它锁:

又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。
排它锁,也称作独占锁,一个锁在某一时刻只能被一个线程占有,其它线程必须等待锁被释放之后才可能获取到锁。又称:x锁, w 锁
例子:

共享锁

又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
共享锁就是允许多个线程同时获取一个锁,一个锁可以同时被多个线程拥有。又称为:s锁, r锁
例子:

锁的粒度

表锁: mysql 中最基本的锁策略,并且是开销最小的策略,锁定整张表,阻塞其他用户对该表的读取和写入,只有在没有写锁的时候在能获取读锁,读锁之间不阻塞。
行锁: 最大程度支持了并发 ,但是这个方式也极大增加了锁的开销。

死锁

死锁的定义是指两个或者两个以上的事务,再同一资源上的相互占用,并请求对方锁定占用的资源,从而造成的恶性循环。
造成死锁的原因:1 事务的执行顺序,这个很难避免。2 有些是数据引擎的实现方式引起的。

如何解决: 1 数据库检测死锁和死锁超时机制 例如innodb 检测到死锁会返回一个错误。
2 就是事务等待时间设置超时,自动放弃锁的请求,这种不太友好
3 innodb 将死锁中获取锁定最小的事务进行回滚。(锁定回滚法)

你可能感兴趣的:(mysql)