悲观锁:悲观锁是由数据库提供的,用于防止数据库并发控制造成的异常。
实现悲观锁:在要进行加锁的事务中的sql语句末加上 for update。
悲观锁正如他的名字一样,比较悲观,他在加锁过程中,不允许任何事务进行查询或增删改。
乐观锁:乐观锁是由逻辑思维实现的,也是用于防止并发控制。
实现乐观锁:需要在数据表中加一个物理列version,还需要在加锁的sql语句加上where条件(根据你的id和version的值进行判断)。
SET autocommit=0;
START TRANSACTION;
UPDATE stock SET scount=scount-10,
`version`=`VERSION`+0.1
WHERE sid=1 AND `version`=1.1
SELECT * FROM stock;
COMMIT;
START TRANSACTION;
UPDATE stock SET scount=scount-10,
`version`=`VERSION`+0.1
WHERE sid=1 AND `version`=1.1
SELECT * FROM stock;
COMMIT;
乐观锁和他的名字也一样,他在加锁过程中,运行事务进行查看,但不允许进行增删改。
两者的优缺点:悲观锁比较安全,但是资费耗费比较大。
乐观锁性能比较好,但是安全性低,容易死锁。 两者可以分场景使用。