DDL:数据定义 , 它用来定义数据库对象,包括库 , 表,列 , 通过ddl我们可以创建,删除,修改数据库和表结构;
DML:数据操作语言,增加删除修改数据表中的记录;
DCL:数据控制语言,定义访问权限和安全级别;
DQL:数据查询语言,用它来查询想要的记录 。
SQL执行顺序:
- from;
- join
- on
- where;
- group by;
- avg,sum.... 使用聚集函数进行计算;
- having;
- select;
- distinct;
- order by;
- limit;
1事物概念事务是由一组SQL语句组成的逻辑处理单元 。
事务具有以下4个属性,通常简称为事务的ACID属性:
原子性:事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行 。
一致性:在事务开始和完成时,数据都必须保持一致状态 。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性 。
隔离性:数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行 。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然 。
持久性:事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持 。
事务的启动方式
- 显式启动 set autocommit=1 begin 或 start transaction 。配套的提交语句是 commit,回滚语句是 rollback 。
- set autocommit=0 自动提交关掉,意味着如果你只执行一个 select 语句,这个事务就启动了,而且并不会自动提交 。这个事务持续存在直到你主动执行 commit 或 rollback 语句,或者断开连接 。
- 用commit work and chAIn代替 commit可以提交一个事务,并且开启另一个新的事务 。
这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了事务隔离机制、锁机制、MVCC多版本并发控制隔离机制,用一整套机制来解决多事务并发问题 。接下来 , 我们会深入讲解这些机制,让大家彻底理解数据库内部的执行原理 。
脏写当两个或多个事务选择同一行,然后基于最初选定的值更新该行时 , 由于每个事务都不知道其他事务的存在,就会发生丢失更新问题,最后的更新覆盖了由其他事务所做的更新 。
脏读一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数据就处于不一致的状态;这时 , 另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”数据,并据此作进一步的处理,就会产生未提交的数据依赖关系 。这种现象被形象的叫做“脏读” 。
例:事务A读取到了事务B已经修改但尚未提交的数据 , 还在这个数据基础上做了操作 。此时 , 如果B事务回滚,A读取的数据无效,不符合一致性要求 。
不可重读一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了改变、或某些记录已经被删除了!这种现象就叫做“不可重复读” 。
例:事务A内部的相同查询语句在不同时刻读出的结果不一致,不符合隔离性
幻读一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为“幻读” 。
例:事务A读取到了事务B提交的新增数据,不符合隔离性
不可重复读与幻读有什么区别?不可重复读的重点是修改:在同一事务中,同样的条件 , 第一次读的数据和第二次读的「数据不一样」 。(因为中间有其他事务提交了修改)
幻读的重点在于新增或者删除:在同一事务中,同样的条件,第一次和第二次读出来的「记录数不一样」 。(因为中间有其他事务提交了插入/删除)
推荐阅读
- MySQL字段过长导致数据丢失?快速修复方法揭秘!
- 详解 MySQL 的三个删除语句:DROP、TRUNCATE 、DELETE
- MySQL:为什么查询一行数据也要花费上百毫秒
- MySQL:逃不掉的锁事,间隙锁
- MySQL时间存储终极指南:选择最适合你的时间类型!
- 行政14级是什么级别
- Java与MySQL大数据处理的技巧
- 解密Java连接MySQL的最佳实践:选择适合你的方式
- 盟、旗是什么级别? 盟和旗是什么级别
- 二级高级法官相当于什么级别,三级大法官相当于什么行政级别