#MySQL#JavaWeb学习笔记(2020/2/23)

一、SQL语句的四种分类:

  • DDL:操作数据库和表的
  • DML:操作表中的数据的
  • DQL:查询表中的数据的
  • DCL:管理用户的,进行授权之类的操作

二、事务

四大特性:

  • 原子性:事务是最小不可分割的操作单位,要么一起成功,要么一起失败。
  • 持久性:事务提交或回滚后,数据库会永久化保存数据。
  • 隔离性:多个事务之间相互独立。
  • 一致性:事务操作前后,数据的总量不变。(相当于能量守恒)

开启事务:start transaction;

提交事务:committed;

回滚事务:rollback;

事务的隔离级别:多个事务是相互独立的,隔离的,但是操作同一批数据时,会出现问题。

  • 问题一:脏读:读到了另外一个事务未提交的数据(脏数据)。
  • 问题二:不可重复读:一个事务中,两次读取到的数据不一样。
  • 问题三:幻读:事务一使用DML语句操作所有数据,事务二添加了一条数据,事务一查不到自己的修改。
    为什么会幻读,首先数据库这个软件应该是可以并发执行很多任务的,很多事务在并发进行着,因为事务二可能提交了事务,或者回滚了,那么数据库中的数据就被更改了,但是此时事务一还没提交或回滚的话,事务一种进行的操作就没了

隔离级别:

  • ①read uncommitted 读未提交
    出现的问题:脏读,不可重复读,幻读
  • ②read committed 读已提交,一个事务不提交另一个事务读不到提交后的数据。
    出现的问题:不可重复读,幻读
  • ③repeatable read 可重复读,只有事务提交之后才能读取到另一个事务修改后的数据。也即两个事务都得committed。
    出现的问题:幻读
  • ④serializable 序列化,相当于加锁,有锁时另一个事务不会执行
    出现问题:无

但是随着隔离级别提高,安全性会提高,性能会下降,所以说不是越高越好,应该设置相应的隔离级别。

MySQL数据库默认隔离级别:repeatable read,MySQL数据库没有幻读问题。
Oracle数据库默认隔离级别:read committed

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容