目录
事务
操作
步骤
特性
并发事务问题
事务隔离级别
索引
作用
分类
主键索引(PRIMARY KEY)
唯一索引(UNIQUE)
常规索引(INDEX)
全文索引(FULLTEXT)
管理索引
数据备份
视图
事务
事务就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。
Mysql事务处理只支持 InnoDB 和 BDB 数据表类型。
操作
- ,开启事务
start transaction 或 begin ;
- 提交事务
commit ;
- 回滚事务
rollback ;
- 开启Mysql数据库的自动提交
set autocommit = 1 ;
set autocommit = 0 ; # 关闭自动提交模式
注:Mysql中默认是自动提交,使用事务时应先关闭自动提交
步骤
事务处理过程中无错误时提交 COMMIT
事务处理过程中有错误需回滚
特性
事务必须具备以下四个属性,简称ACID属性
- 原子性(Atomicity)
- 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
- 一致性(Consistency)
- 事务完成时,必须使所有的数据都保持一致状态。
- 隔离性(Isolation)
- 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
- 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
- 持久性(Durability)
- 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
并发事务问题
脏读:一个事务读到另外一个事务还没有提交的数据。
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了 "幻影"。
事务隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable Read(默认) | × | × | √ |
Serializable | × | × | × |
查看事务的隔离级别
SELECT @@TRANSACTION_ISOLATION;
设置事务的隔离级别
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
注意:事务隔离级别越高,数据越安全,但是性能越低。
索引
作用
- 提高查询速度
- 确保数据的唯一性
- 可以加速表和表之间的连接
- 实现表与表之间的参照完整性
- 使用分组和排序子句进行数据检索时
- 可以显著减少分组和排序的时间,全文检索字段进行搜索优化
分类
主键索引(PRIMARY KEY)
主键:某一个属性或属性的组合能唯一标识一条记录
特点:
- 最常见的索引类型
- 确保数据记录的唯一性
- 确定特定数据记录在数据库中的位置
唯一索引(UNIQUE)
作用:避免同一个表中某数据列中的值重复
与主键索引的区别:
- 主键索引只能有一个
- 唯一索引可有多个
常规索引(INDEX)
作用:快速定位特定数据
注意:
- index和key关键字都可设置常规索引
- 应加在查找条件的字段
- 不宜添加太多常规索引,影响数据的插入、删除和修改操作
全文索引(FULLTEXT)
作用:快速定位特定数据
注意:
- 只能用于MyISAM类型的数据表
- 只能用于 CHAR 、 VARCHAR、TEXT数据列类型
- 适合大型数据集
管理索引
创建索引
- 创建表时添加
CREATE TABLE `result` (
//省略一些代码
INDEX/KEY `ind` (`studentNo`, `subjectNo`)
)
- 建表后追加
ALTER TABLE 表名 ADD 索引类型 (数据列名);
删除索引
drop index 索引名 on 表名
alter table 表名 drop index 索引名
alter table 表名 drop primary key //主键索引
查看索引
show index(或keys) from 表名
索引准则
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表建议不要加索引
- 索引一般应加在查找条件的字段
哪些情况需要创建索引?
- 主键自动建立唯一索引
- 频繁作为查询条件的字段应该创建索引
- 查询中与其他表关联的字段,外键关系建立索引
- 频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引
- WHERE条件里用不到的字段不创建索引
- 单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引)
- 查询中排序的字段,排序的字段若通过索引去访问将大大提高排序速度
- 查询中统计或者分组字段
数据备份
数据库备份必要性
- 保证重要数据不丢失
- 数据转移
Mysql数据库备份方法
- mysqldump 备份工具
- 数据库管理工具
- 直接拷贝数据库文件和相关配置文件
mysqldump 客户端
- 作用:
- 转储数据库
- 搜集数据库进行备份
- 将数据转移到另一个SQL服务器(不一定是Mysql服务器)
- 语法:
mysqldump -h 主机名 -u 用户名 -p [options] 数据库名
[ table1 table2 ] > path / filename.sql
视图
什么是视图?
视图是由查询结果形成的一张虚拟表。
什么时候要用到视图?
如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询
视图的创建语法:
create view 视图名 as select 语句;