1.数据库并发
当多个用户修改数据库中同一个数据时,需要对用户的访问进行并发管理,不然不会出现数据更新丢失,数据脏读等错误;比如线程A和B从数据库中读取同一数据为1,线程A先修改1为10,线程B接着又将数据修改成1,那么A的修改丢失;故需要数据库对数据加锁以实现并发管理
2.悲观锁
主观上认为数据一定会修改,对访问的数据加锁,在释放锁之前,其他事务都不能访问该数据,比如goods表,查询所有name=“math”的记录,select * from goods where name = “math” for update,对查询出来的记录加锁,其他悲观锁事务均不能读写这些记录,但是select * from goods where name = “math”可以读数据;悲观锁一般由数据库锁机制实现;悲观锁的锁粒度默认是基于Row-level (表的id明确的情况下),如果id不明确,则使用Tabel-level。
注:使用悲观锁会,数据库不会默认提交更新,不能使用autocommit,开启事务,完成持久化操作后,需要手动提交事务,commint();
3.乐观锁
主观上认为数据不会被修改,但是在提交更新数据时会检测冲突与否,如果冲突,返回用户错误信息,让用户决定接下来怎么做;检测方法有两种:一、数据版本控制机制,就是在数据库表中添加一个version字段,每提交一次更新,version就加1。读取数据时,把version字段也读取出来,要修改数据时判断version和数据库中version大小,如果数据库中的version大,说明已经有线程修改过该记录,向用户报错。一般乐观锁用在读操作比较多的情况下 。其实乐观锁的工作原理和无阻塞算法(CAS)类似,CAS也是先获取值,然后计算值,接着判断是否有其他线程修改了值,如果没有,则自己修改值成功,否则修改值失败,CAS是原子操作
4.并发访问数据库人数
并发访问人数就是同一时刻和 数据库有建立连接的连接数