学习总结:数据库-事务,连接池

  •  数据库事务是什么 数据库事务的性质 事务的二段提交机制?

事务由一个或多个数据库操作构成,要么一同提交成功,要是有一个出现失败,就回滚。

  •  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()方法,将连接池再添加到连接池中。

发布了41 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ScanQ/article/details/89222220