sql多用户访问数据库其实就是事务并发,会引起如下问题:
创新互联是一家专业提供那曲企业网站建设,专注与成都网站制作、成都网站设计、外贸营销网站建设、HTML5建站、小程序制作等业务。10年已为那曲众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
1、脏读:一个事务读取到了另外一个事务没有提交的数据
事务1:更新一条数据
事务2:读取事务1更新的记录
事务1:调用commit进行提交
此时事务2读取到的数据是保存在数据库内存中的数据,称为脏读。
读到的数据为脏数据
详细解释:
脏读就是指:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,
另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个
1、数据库里有个东西叫锁
2、在每个人操作表的时候,对表加锁,这样防止别人对表数据脏读、脏写
3、操作完成后,释放锁
4、小心,加锁后可能会造成死锁,特别是锁过多的时候。
用锁需谨慎,有风险,但对数据来说是安全的
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
如果你是担心脏数据。那么可以在SQL语句上做改动。例如:
假设表名为table1,发布数量字段为total,用户ID字段为user_id,值为10,则
update table1 set total = total - 1 where user_id = 10;