设为首页 加入收藏

TOP

面试——关系型数据库总结(二)
2019-09-17 18:28:45 】 浏览:45
Tags:面试 关系型 数据库 总结
就是不可重复读。

3、幻读

所谓幻读,就是指在一个事务里面的操作中发现了未被操作的数据。比如学生信息,事务A开启事务-->修改所有学生当天签到状况为false,此时切换到事务B,事务B开启事务-->事务B插入了一条学生数据,此时切换回事务A,事务A提交的时候发现了一条自己没有修改过的数据,这就是幻读,就好像发生了幻觉一样。幻读出现的前提是并发的事务中有事务发生了插入、删除操作。

 

通过一下sql可以查出数据库的事务隔离级别:

 
 
1 select @@tx_isolation

 

执行结果:数据库的默认隔离级别

 

 

接下来测试一下数据库的事务隔离级别:

首先在product表中添加一个count字段

并且将阿迪达斯的数量设置为50,模拟用户抢购。

1 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
2 
3 BEGIN;SET AUTOCOMMIT = 0;SELECT count FROM product where productId = 2;
4 
5 SELECT count FROM product where productId = 2;
6 
7 UPDATE product SET count = 49 WHERE productId= 2;

 

使用for update非常耗费资源,使用乐观锁更节省资源。

乐观锁的使用:

1 SELECT count FROM product WHERE productId = 2;
2 UPDATE product SET count = 47 WHERE productId = 2 AND count = 48;
 
 

如果返回0行就代表失败,就会返回用户够买失败。读取数据,记录Timestamp,需要自己加一个Timestamp.

检查和提交要在同一行中执行。

 

乐观锁的应用场景:买家不是很多,不会造成很多冲突用乐观锁非常好,冲突多的时候要用,很可能count存在服务器内存当中(分布式锁),因为数据库在硬盘当中非常慢。

 

7. 数据库例题

下列方法中,哪个不可以用来程序调优。 B

A、改善数据访问方式以提升缓存命中率

B、使用多线程的方式提高I/O密集型操作的效率(I/O密集型访问,多线程效果并不太起作用)

C、利用数据库连接池替代直接的数据库访问

D、使用迭代替代递归

E、合并多个线程调用批量发送(减少等待时间)

F、共享冗余数据提高访问效率

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇spark 机器学习 ALS原理(一) 下一篇MySQL问题排查工具介绍

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目