什么是MySQL?MySQL是一种关系型数据库,在Java企业级开发中非常常用,因为MySQL开源、免费、易于扩展。阿里巴巴数据库系统也大量使用MySQL,稳定性有保障。MySQL是开源的,所以任何人都可以在GPL(GeneralPublicLicense)许可下下载,并根据个人需要进行修改。MySQL默认端口号为3306MySQL数据库入门教程B站传送门:https://www.bilibili.com/video/BV1fx411X7BD课程介绍:本套MySQL数据库视频教程由教学总监杜老师讲解PowerNode,详细讲解了MySQL的相关知识。包括MySQL概述、MySQL应用环境、MySQL系统特性、MySQL基础知识、MySQL管理工具、MySQL安装方法及MySQL新特性,通过观看这套Java视频教程,您可以掌握全套MySQL知识。交易相关什么是交易?事务是一组逻辑操作,可以执行也可以不执行。最经典的交易经常被引用为转账的例子。如果小明想转1000元给小红,这笔转账会涉及两个关键操作:减少小明余额1000元,增加小红余额1000元。万一这两个操作突然出现错误,比如银行系统崩溃,导致小明的余额减少,小红的余额没有增加,这是错误的。事务是为了确保这两个关键操作要么成功要么失败。让我介绍一下事物的四大特性(ACID)?原子性:事务是最小的执行单位,不能分割。事务的原子性确保动作全部完成或完全没有效果;一致性:事务执行前后,数据保持一致,多个事务读取相同数据的结果相同;隔离性:并发访问数据库时,一个用户的事务不受其他事务的干扰,数据库在并发事务之间是独立的;持久性:事务提交后。它对数据库中数据的改变是持久化的,即使数据库出现故障也不应该对其产生任何影响。并发事务带来的问题有哪些?在一个典型的应用中,多个事务并发运行,往往对同一份数据进行操作,完成各自的任务(多个用户对统一数据进行操作)。虽然并发是必要的,但它可能会导致以下问题。脏读:当一个事务正在访问数据并修改数据,而修改还没有提交到数据库时,另一个事务也访问数据,然后使用数据。因为这个数据是未提交的数据,另一个事务读取的数据是“脏数据”,基于“脏数据”的操作可能是错误的。丢失修改:当一个事务读取一条数据时,另一个事务也访问了该数据,那么在第一个事务修改了数据之后,第二个事务也修改了数据。这样第一笔交易中的修改结果就丢失了,所以称为丢失修改。例如:事务1读取了一张表中的数据A=20,事务2也读取了A=20,事务1修改了A=A-1,事务2也修改了A=A-1,最终结果为A=19,事务1修改丢失。不可重复读(Unrepeatableread):指在一个事务内多次读取同一个数据。当这个事务没有结束时,另一个事务也访问了数据。那么,在第一个事务中的两次读取数据之间,由于第二个事务的修改,第一个事务两次读取的数据可能不同。这种情况恰好是一个事务中两次读取的数据是不同的,所以称为不可重复读。幻读:幻读类似于不可重复读。当一个事务(T1)读取几行数据,然后另一个并发事务(T2)插入一些数据时,就会发生这种情况。在后续的查询中,第一个事务(T1)会多出一些不存在的记录,好像出现了幻觉,所以称为幻读。不可重复读和幻读的区别:不可重复读的重点是修改,幻读的重点是增删改查。例1(同样的条件,你读过的数据,再读一遍发现值不一样):事务1中的A先生还没有完成读取自己1000工资的操作,而事务中的B先生2将A的工资改为2000,导致A重新读取自己的工资时,工资改为2000;这是不可重复的阅读。示例2(相同条件,第一次和第二次读出的记录条数不同):工资单表中有4个人工资大于3000,事务1读取所有工资为大于3000,共找到4条记录。这时事务2又插入了一条工资大于3000的记录,事务1再次读取时,发现的记录变成了5条,导致幻读。什么是事务隔离级别?MySQL的默认隔离级别是多少?SQL标准定义了四种隔离级别:READ-UNCOMMITTED(读未提交):最低的隔离级别,允许读取未提交的数据更改,这可能会导致脏读、幻读或不可重复读。READ-COMMITTED(已提交读):允许读取已被并发事务提交的数据,可以防止脏读,但仍然可能出现幻读或不可重复读。REPEATABLE-READ(可重复读):同一个字段的多次读取结果是一致的,除非数据被事务本身修改,可以防止脏读和不可重复读,但幻读还是有可能发生。SERIALIZABLE(可序列化):最高隔离级别,完全服从ACID隔离级别。所有的事务都是一个一个执行的,这样事务之间就不存在相互干扰的可能,即这个级别可以防止脏读、不可重复读和幻读。MySQLInnoDB存储引擎默认支持的隔离级别是REPEATABLE-READ(可重读)。我们可以使用SELECT@@tx_isolation;commandtoviewmysql>SELECT@@tx_isolation;@@tx_isolationREPEATABLE-READ这里需要注意的是:与SQL标准不同的是InnoDB存储引擎是处于REPEATABLE-READ(可重读)事务隔离级别下-使用keylock算法,可以避免幻读,这是有别于其他数据库系统(如SQLServer)的。因此,InnoDB存储引擎默认支持的隔离级别是REPEATABLE-READ(可重读),可以充分保证事务的隔离要求,即达到了SQL标准的SERIALIZABLE(可序列化)隔离级别。因为隔离级别越低,事务请求的锁就越少,所以大部分数据库系统的隔离级别都是READ-COMMITTED(读取提交的内容):,但是需要知道的是InnoDB存储引擎使用的是REPEATABLE-READ默认情况下(可以重读)没有任何性能损失。InnoDB存储引擎一般在分布式事务的情况下使用SERIALIZABLE(可序列化)隔离级别。待续。.....
