- 数据库事务是什么 数据库事务的性质 事务的二段提交机制?
事务由一个或多个数据库操作构成,要么一同提交成功,要是有一个出现失败,就回滚。
- mysql事务隔离级别 隔离级别的作用,分别会产生什么问题
read uncommitted 读未提交 什么问题都不能解决。 会出现脏读,不可重复读,幻读。
read committed 读已经提交 可以解决脏读。 会出现不可重复读,幻读。
reaptable read 可重复读取 可以解决脏读和不可重复读。 会出现幻读。
serializable 串行化 可以解决 脏读,不可重复读,幻读。 数据库开销过大。
- mysql默认引擎的隔离级别
repeatable 重复读取
- mysql四大事务特性,每个特性都是什么意思
原子性,事务中的操作要么都发生,要么都不发生。
一致性,一个事务中,事务前后数据的完整性必须保持一致。
隔离性,多个用户并发访问数据库时,一个用户的事务不会被其他用户的事务打扰,多个并发事务之间数据相互隔离。
持久性,一个事务一旦被提交,它对数据库中的改变是永久性的。
- 什么是脏读、不可重复读、虚(幻)读
假设有两个事务A和B
脏读:B事务读取了A事务尚未提交的数据。
不可重复读:一个事务中两次读取的数据的内容不一致。
幻读/虚读:一个事务中,两次读取的数据的数量不一致。
- 什么是幻读,如何解决
把事务的隔离级别调到串行化
- 银行A向B转账,实现了哪些步骤?这个求小伙伴们指点该怎么说啊,我就说a扣50,b加50,这一步骤加锁并且是事务操作
首先,begin开启事务,账户a减50,账户b加50,然后commit提交,中间如果出现问题就回滚。
- 事务1开启事务,查询一个表没有数据,事务2新插一条数据,并且提交,事务2再次查询是否有数据,事务1有数据吗?为什么?
如果是mysql数据库,事务2有,事务1没有,因为mysql的默认隔离级别是可重复读。
但如果是oracle数据库,事务2有,事务1有,因为oracle的默认隔离级别是读已提交。
- 数据库连接池是为了解决什么问题
解决数据库的性能问题,因为频繁地新建打开关闭数据库会对jvm和数据库都有一定的资源负荷。
- 数据库连接池 最大连接数、最小连接数
数据库连接池有BDCP和CP30;
这个可以设置,mysql默认连接池最大数是100,最大是16384,最小是0。
- 一个数据库连接池怎么设计;
0 首先要确定大致的连接池数目,首先先运行系统,监听统计一段时间内的连接池,统计一段时间内的连接池数量,然后查看最大的,最小的,以及平均值,然后根据这些参数信息确定连接池数目。
1 实现接口javax.sql.DataSource(各个厂商都要首先这个接口,这样应用程序可以方便的切换不同厂商的连接池)
2 创建一个集合来存放连接,如果只是查询,用ArrayList。如果删除和添加操作比较多,使用linkedlist。
3 初始化连接池连接。
4 之后程序如果需要连接,就调用getConnection()从连接池中获得连接。为了保证连接只给一个线程使用,先将连接从连接池中移除。
5 用户用完之后释放资源时,不执行close()方法,将连接池再添加到连接池中。