文章目录
1.事务
数据库中的执行单元,具有ACID特性,事务能够保证事件内部的sql语句同事成功或失败,控制事务的安全访问。
1.1ACID特性
- 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency):要么都成功,要么都失败。
- 隔离性(Isolation):并发执行的各个事务之间不能互相干扰。
- 持久性(Durability):事务一旦提交,它对数据库中的数据的改变就应该是永久性的。
1.2四种隔离级别
- Read Uncommitted:最低的事务隔离级别,一个事务还没提交时,它做的变更就能被别的事务看到。
- Read committed:保证一个事物提交后才能被另外一个事务读取。大多数数据库的默认级别,比如 Sql Server , Oracle。
- Repeatable read:多次读取同一范围的数据会返回第一次查询的快照,即使其他事务对该数据做了更新修改。事务在执行期间看到的数据前后必须是一致的。mysql默认。
- Serializable(可串行):最高代价但最可靠的事务隔离级别。读写会加锁,当出现冲突时,后访问的事务必须等前一个事务执行完成,才能继续执行。
脏读、不可重复读、幻读
- 脏读:某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
- 不可重复读:在同一个事务内,两个相同的查询返回了不同的结果。
- 幻读:读会读到上一次没有返回的记录,看起来是幻影一般。
1.3spring源码阅读–@Transactional实现原理
2.MySQL几种常用的存储引擎区别
特性 | InnoDB | MyISAM | MEMORY |
---|---|---|---|
事务 | 支持 | 无 | 无 |
存储限制 | 64TB | 有 | 有 |
空间使用 | 高 | 低 | 低 |
内存使用 | 高 | 低 | 高 |
处理速度 | 低 | 高 | 高 |
对外键的支持 | 支持 | 无 | 无 |
存储位置 | 磁盘 | 磁盘 | 内存 |
同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。
Statement和PreparedStatement的区别
PS性能更好
- PS接口代表预编译的语句,可以减少sql的编译错误并增加安全性(防止注入)。
- PS中sql语句是可以带参数的,避免了用字符串连接拼接sql语句的麻烦。
- 批量处理sql或频繁执行相同查询时,PS性能优势明显,由于DB可以将编译优化后的sql语句缓存起来,下次执行相同结构的语句就会更快。
数据库连接池原理
- 在系统初始化的时候,将创建一定数量的数据库连接作为对象存储在内存中
- 当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。
使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。 - 连接的数量是由最小数据库连接数制约。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。
- 最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。