目录
1.数据库事务讲解:
特性和级别
1.数据库事务讲解:
数据库事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
通俗的说:事务就是 一组SQL语句(程序执行单元)在操作的过程当中, 要么同时成功, 要么同时失败。
事务的操作:
1. 开启事务, SQL 语法: START TRANSACTION;
2. 回滚事务, SQL 语法: ROLLBACK;
3. 提交事务 COMMIT;
事务提交方式分类: ? ? 自动提交 (MySQL 默认的提交方式) ? ? 手动提交 (Oracle 采用的提交方式)
相关SQL语法 ?? ?-- 查看事务的提交方式, 说明: 1表示自动提交, 0表示手动提交 ?? ?SELECT @@AUTOCOMMIT; ?? ?-- 修改事务的提交方式, 标准语法 ?? ?SELECT @@AUTOCOMMIT = 数字;
特性和级别
1. 四大特性(感兴趣的可以看下原子性和一致性有什么区别) 原子性:不可分割,事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。数据库中的数据应满足完整性约束。 隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行。 持久性:已被提交的事务对数据库的修改应该永久保存在数据库中。 ???? 2. 四种级别 ????A. 读未提交 ??????READ ?UNCOMMITTED ????B. 读已提交 ??????READ ?COMMITED ????C. 可重复读 ??????REPEATABLE ?READ ????D. 串行化????????SERIALIZABLE
序号 | 隔离级别 | 名称 | 脏读 | 不可重复读 | 幻读 | 数据库默认隔离级别 |
---|
1 | READ UNCOMMITTED | 读未提交 | YES | YES | YES | | 2 | READ COMMITTED | 读已提交 | NO | YES | YES | Oracle 数据库默认级别 | 3 | REPEATABLE READ | 可重复读 | NO | NO | YES | MySQL 数据库默认级别 | 4 | SERIALIZABLE | 串行化 | NO | NO | NO | |
问题说明 | 现象说明 |
---|
脏读 | 在事务A 处理的过程当中,读取到了另外一个事务 B,还没有提交的数据, 导致两次查询结果,不一致 | 不可重复读 | 在事务 A 处理的过程当中,读取到了另外一个事务 B,修改并且已经提交的数据,导致两次查询结果,不一致 | 幻读 | 现象1: SELECT 查询某条记录是否存在,不存在,准备插入记录,但是执行 INSERT 的时候,发现记录已经存在,无法插入。 现象2: SELECT 查询某条记录是否存在,不存在,去执行 DELETE 删除操作的时候,发现删除成功了。 |
2.存储引擎的介绍
MySQL 当中常用的存储引擎:
1. InnoDB : 支持事务, MySQL5.5版本之后, 默认的存储引擎
2. MyISAM : 不支持事务
3. Memory : 速度快,最不安全。小量快速访问的数据
3.索引的分类
1. 按照功能分类
A. 普通索引: 最基本的索引,他没有任何的限制
B. 唯一索引: 索引列的值必须唯一, 但是允许有空值的情况, 如果是组合索引, 则列值组合必须唯一
C. 主键索引: 一种特殊的唯一索引, 不允许有空值, 一般在建表时, 同时创建主键索引
D. 组合索引: 就是将单列索引进行组合
E. 外键索引: 只有 InnoDB 引擎支持外键索引, 用来保证数据的一致性、完整性和实现级联操作
F. 全文索引: 快速匹配全部文档的方式。InnoDB 引擎 5.6 版本后, 才能支持全文索引, MEMORY 引擎不支持
?
2. 按照结构分类
A. B+Tree 索引: MySQL 使用最频繁的一个索引数据结构, 是InnoDB和MyISAM 存储引擎默认的索引类型
B. Hash 索引: ? MySQL 中的 Memory 存储引擎默认支持的索引类型
创建索引
-- 1. 创建索引的语法:
CREATE [UNIQUE][FULLTEXT] ?INDEX 索引名称 [USING 索引类型] ?ON 表名称(列名称....);
-- 2. 案例代码:
-- 为 student 表当中的 name 列创建一个普通的索引。
CREATE ?INDEX idx_name ?ON student(name);
-- 为 student 表当中的 age 列创建一个唯一索引。
CREATE ?UNIQUE ?INDEX idx_age ?ON student(age);
查看索引
-- 1. 查看索引的语法:
SHOW ?INDEX ? FROM 表名称;
-- 2. 案例代码: 查询学生表当中,拥有的索引
SHOW ?INDEX ?FROM student;
添加索引
-- 1. 普通索引
ALTER ?TABLE 表名称 ?ADD ?INDEX 索引名称 (列名);
-- 2. 组合索引
ALTER ?TABLE 表名称 ?ADD ?INDEX 索引名称 (列名1,列名2,列名3....);
-- 3. 主键索引
ALTER ?TABLE 表名称 ?ADD ?PRIMARY ?KEY (主键列名称);
-- 4. 外键索引
ALTER ?TABLE 表名称 ?ADD ?CONSTRAINT 外键名称 ?FOREIGN ?KEY (本表外键列名) ?REFERENCES 主表名称(主键列名);
-- 5. 唯一索引
ALTER ?TABLE 表名称 ?ADD ?UNIQUE 索引名称(列名);
-- 6. 全文索引
ALTER ?TABLE 表名称 ?ADD ?FULLTEXT 索引名称(列名);
删除索引
-- 1. 基础语法
DROP ?INDEX 索引名称 ?ON 表名称;
|