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

锁_第1张图片

排他锁,在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会自动拒绝

实验操作

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

锁_第2张图片

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

锁_第3张图片

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

锁_第4张图片

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

锁_第5张图片

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

锁_第6张图片

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

锁_第7张图片

死锁的样式

锁_第8张图片

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

锁_第9张图片
锁_第10张图片
锁_第11张图片
锁_第12张图片

你可能感兴趣的:(锁)