- Mqsql事务
- Mysql事务与@Transactional注解的属性
- Mysql常用存储引擎
- MyISAM与InnoDB 的区别
转至菜鸟教程
MySQL事务主要是用于处理操作量大、复杂度高的数据,比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除该人员相关的信息,如信箱、文章等等,这样。这些数据库操作语句就构成一个事务!
注意:
- 在Mysql中只有使用了Innodb数据库引擎的数据库或表才支持事务
- 事务处理可以用来维护数据库的完整性,保证成批额的SQL语句要么全部执行,要么全部不执行
- 事务用来管理 insert,update,delete语句
一般来说,事务必须满足4个条件(ACID)
原子性(Atomicity,或称不可分割性)
一致性(Consistency)
隔离性(Isolation,又称独立性)
持久性 (Durability)
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性: 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。这四个隔离级别又俗称:脏读、不可重复读、幻读、加锁读。
- 脏读: 就是A事务修改了一个字段信息,但是还没有提交,这个时候B事务来读取这个字段信息,读到的是A事务修改后的,如果此时,A事务回滚了,那么B事务之前读到的这个信息就是脏读。
- 不可重复读: 就是同一个事务里面,读取同一个字段信息,这一刻读到的和下一刻读到的不一样。就比如上面的例子,B事务一开始读到了A事务修改后的信息,然后A回滚,B再次读这个字段,那么信息就和之前不一样,这就是不可重复读。
- 幻读: 这个和脏读有点类似,就是A事务插入了一些数据,但是还没提交,然后B事务读取了这些数据,然后A事务发生了回滚,B事务再次读取,发现和刚刚读取的不一样了,就和出现了幻觉一样,所以就叫幻读。和脏读的区别在于,脏读关注的是更新,幻读关注的是插入。
- 加锁读: 就是指事务会将读取到的信息锁起来,就是在读或者进行其它操作的时候,不允许其它事务进行修改。
持久性:事务处理结束后,对数据的修改是永久的,即便系统故障也不会丢失
MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务 ROLLBACK 事务回滚 COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交 SET AUTOCOMMIT=1 开启自动提交Mysql事务与@Transactional注解的属性
转自简书 简书-跟我回家_f429-@Transactional注解
public @interface Transactional {
@AliasFor("transactionManager")
String value() default ""; //当配置多个事务管理器时,可以使用该属性指定选择哪个事务管理器。
@AliasFor("value")
String transactionManager() default ""; //事务控制
Propagation propagation() default Propagation.REQUIRED;//用于指定事务的传播行为、默认值为 REQUIRED。
Isolation isolation() default Isolation.DEFAULT;//用于指定事务的隔离规则,默认值为DEFAULT
int timeout() default -1;//用于设置事务的超时属性
boolean readOnly() default false;//用于设置事务是否只读属性
Class extends Throwable>[] rollbackFor() default {};//用于设置哪些异常需要回滚
String[] rollbackForClassName() default {};//用于设置哪些异常需要回滚
Class extends Throwable>[] noRollbackFor() default {};//用于设置哪些异常不需要回滚
String[] noRollbackForClassName() default {};//用于设置哪些异常不需要回滚
}
Mysql常用存储引擎
1、MyISAM引擎;2、MyISAM Merge引擎;3、InnoDB引擎;4、memory引擎;5、archive引擎。
MyISAM与InnoDB 的区别转自 CSDN-Chackca-MyISAM与InnoDB 的区别(9个不同点)
-
InnoDB支持事务,MyISAM不支持事务
-
InnoDB支持外键,MyISAM不支持
-
MyISAM表格可以被压缩后进行查询操作
-
InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁
-
InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键),而Myisam可以没有
-
Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI
Innodb:frm是表定义文件,ibd是数据文件 Myisam:frm是表定义文件,myd是数据文件,myi是索引文件
-
InnoDB是聚集索引,MyISAM是非聚集索引
聚集索引和非聚集索引的区别
聚集缩索引的B+树上存放的是具体的数据,非聚集索引的叶子节点上存放的是聚集引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据。
聚集索引插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入),查询数据比非聚集数据的速度快。
php中文网-mysql聚集索引和非聚集索引的区别是什么
CSDN-码虫码农-简单理解聚集索引和非聚集索引 -
InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERe条件)



