共享锁:在查詢語句后面加上 lock in share mode 可在查询到的行上面加上共享锁,其他线程也可以获取,可读,不可修改数据。
select ... lock in share mode
排他锁:在查询语句后面加上 for update 可对查询到的数据加上排它锁,其他线程不可再获得,但可读,不可修改数据
select ... for update
事务的隔离级别:
读不提交(read uncommit):能够读取未提交的记录,事务之间没有隔离,一般不会使用。
读提交(read commit):只能读取已提交的记录。一次事务中,多次对相同的数据进行查询可能会产生幻读。(因为在这个过程中可能会有别的事务已经提交,改变了第一次的读取记录,导致两次查询的结果不一致)
可重复读(read repeatable):在一次事务中,多次读取的结果是一样的,不管其他事务是否有提交,解决了不可重复读的问题
串行化(serializable):事务串行,只能一个事务执行完毕,下一个事务才能执行
脏读:读取了未提交事务的数据
幻读:在一个事务中,相同的查询得到的结果不一样,主要指的是其他事物执行了insert或者delete操作
不可重复读:和幻读相似,主要指的是其他事务执行了update操作,导致结果不一致
sql 语句相关:
begin;(开始事务)
rollback;(事务回滚)
commit;(事务提交)
select @@tx_isolation;(查看事务的隔离级别)
参考文章:
连Mysql 锁的机制都不了解,怎么做架构师 https://www.itcodemonkey.com/article/7968.html