MySQL DAY 05 重点知识总结 索引&事务
一 索引
- 索引介绍
索引就相当于书的目录 我们查取某个数据的时候 如果不使用索引 将会从第一条数据进行匹配 匹配到数据的最后一个 每一个数据都会进行判断 表越大 花费的时间越多 那么会一定程度上降低查找的速度 索引有利于快速找出某个列的特定值的行
当然 索引也不宜过多 索引越多的写入 修改的速度就会月满 因为写入修改数据时 也要修改索引
在MySQL中 所有数据类型的列都可以被索引 常用的储存引擎有InnoDB 和 MyISAM ,这两种都支持每个表创建16个索引 .这种数据及结构能让查找数据 书怒访问 插入数据以及删除的操作都在对数时间内完成 - 索引分类
- 普通索引(index): 最基本的索引 没有任何限制
- 唯一索引(unique): 某一行启用了唯一索引 则不准许这一列的行数据有重复的值 针对这一列的每一行数据都要求事唯一的
- 主键索引(primary key): 它是一种特殊的索引 不允许有空值 一般是在建表的时候同时创建主键索引 常用于用户ID 类似于书中的页码
- 全文索引: 对于需要全局搜索的数据 进行全文索引
- 查看当前文档索引
示例说明: 查看user表的索引结构
# 基本语法
show index from tablename;
# 索引
show index from user\G;
# 这个地方\G 是格式化输出 用文字表示出来
- 普通索引
# 基本语法
alter table 表 add index(字段)
# 示例
alter table money add index(username);
# 示例说明
# 为money表的username字段增加索引
- 唯一索引
# 基本语法
alter table 表 add unique(字段)
# 示例
alter table money add unique(username);
- 主键索引
# 基本语法
alter table 表 add primary key(字段)
# 示例
alter table money add primary key(username)
- 创建表时申明索引
primary key
index
unique
create table user(
id int auto_increment,
name varchar(20),
primary key(id),
unique(name)
);
- 删除索引
# 基本语法
alter table table_name index index_name
# 示例
alter table money drop index age;
二 事务
-
事务控制语言
我们每执行一条SQL语句 每执行一组SQL语句 我们都可以称之为事务
如果一组SQL语句中 某一个SQL语句失败了 称为整个事务的失败 因此出现这种情况的时候必须要恢复到正常的清空才能没有问题
如果有了事务 就可以避免该事情的发生
事务可以看作是一个容器 将多条语句放入该容器 最后只要一个命令行 来决定其中的所有语句是否执行 -
事务的四大特征 [记下来]
事务必须满足以下四个条件- 原子性(Atomicity) 事务作为一个整体被执行 包含在其中的对数据库的操作 要么全部被执行 要么都不执行
- 一致性(Consistency) 事务应确保数据库的状态从一个一致状态转变为另一个一致状态
- 隔离性(Isolation) 多个事务并发执行的时候 一个事务的执行不影响其他事务的执行
- 持久性(Durability) 已被提交的事务对数据库的修改应该永久保存在数据库中
-
事务的流程
- start transaction : 执行开始事务命令后 下面将进行事务模式
- update delete insert 操作: 在事务执行之后 这些操作只会在内存状态下进行 而不是在物理状态下
- commit : 在事务执行完成后 确认执行无误且成功之后 就可以使用commit把内存中执行的结果 提交到物理内存中
- rollback : 如果在事务执行的过程中 发生了错误 则可以使用rollback命令回滚到上一个事务操作
-
示例应用
# 1. 开始事务
start transaction
# 2. 把表中的信息进行更改
update money set age=18 where name='张三';
select * from money;
# 3.如果执行到这里事务完美执行 并没有报错 就可以:
commit;
# 4.更新后如果出现问题 发现事务我不想执行了或者其他原因想撤销
rollback;