数据库自动带锁,insert,update,delete(排他锁) 注意,这个表格的引擎需要为Innodb的 在mysql中做事物的实验,记住要设置为手动式提交事物 Set autocommit=0;

image

排他锁,在select语句最后就加上for update Select * from student where uid=1 for update 共享锁,在语句最后加上lock in share mode Select * from user where uid=1 lock in share mode

共享锁可以向一条记录加入多个共享锁,但是要转成排他锁的话,需要等待其他的共享锁松开,后面继续续又其他事物排他锁加入,mysql会自动拒绝

实验操作

两个访问分别都设置为了手动事物,一个事物操作插入数据,然后另一个查询,会发现插入的数据没有出现在数据库中。

image

当我们提交后,添加的数据才显示在数据库中。

image

当我们回滚后,前面添加的SQL语句则无效

image

人为加排他锁,别人只能查询数据而不能修改数据,如果加锁对象还未提交或回滚,修改数据将会超时。

image

只有等加锁对象提交或者回滚,别的对象才能对数据进行修改;

image

但是因为我们给select添加的是行级排他锁,所以别人不可以修改我们所添加锁的行,但是没有加锁的行,别人是可以修改的。

image

死锁的样式

image

利用事物和锁,做一个购票系统

image

image

image

image

原文地址:https://www.cnblogs.com/kaigexuetang/p/7448549.html