MySQL学习(五)

事务

  • 将一组sql语句放到同一批次中进行
  • 如果其中一个sql语句出错,该批次中的所有sql将被取消执行
  • MySQL事务处理只支持InnoDB和BDB数据表类型

事务的ACID原则

  • 原子性(Atomic):
    整个事务中的所有操作,要么全部完成,要么全部都不完成,不能停滞在某个环节中。事务某个环节出错将回滚(rollback)到事务开始的状态,就像事务从来没执行过一样
  • 一致性(Consist):
    一个事务可以封装状态变化,事务始终保持系统处于一致的状态,不管在给定的任意时间并发的事务有多少。如果事务并发多个,系统也必须如同串行事务一样处理。具有保护性和不变性。整个事务开始前和结束后的所有数据应该保持一致。
  • 隔离性(Isolated):
    隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行 化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
  • 持久性(Duable):
    在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

语法

(''')
--关闭自动提交,MySQL默认开启自动提交
SET autocommit=0;

--开始一个事务,标记事务的起始点
START TRANSACTION

--提交一个事务给数据库
COMMIT

--回滚
ROLLBACK

--还原MySQL自动提交
SET autocommit=1;

-保存点
SAVEPOINT 保存点名 --设置一个事务的保存点
ROLLBACK TO SAVEPOINT 保存点名 --回滚到保存点
RELEASE SAVEPOINT 保存点名 --释放(删除)一个保存点
(''')

流程

(''')
SET autocommit=0;
START TRANSCATION;
事务执行的相关操作
...
COMMIT;
SET autocommit=1;
(''')


索引

索引的作用:

  • 提高查询速度
  • 确保数据的唯一性
  • 可以加速表和表之间的连接,实现表与表之间参照的完整性
  • 使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间
  • 全文检索字段进行搜索优化

索引的分类:

  • 主键索引(Primary Key)
  • 唯一索引(Unique)
  • 常规索引(Index)
  • 全文索引(FullText)

主键索引

作用:某一个属性组能唯一标识一条记录
特点:

  • 最常见的索引类型
  • 确保数据记录的唯一性
  • 确定特定数据记录在数据库的位置

唯一索引

作用:避免同一个表中的某列数据的值重复

  • 主键索引只能有一个,唯一索引可以有多个

(''')
CREATE TABLE grade(
gradeID INT(10) AUTO_INCREMENT PRIMARY KEY,
gradeName VARCHAR(40) NOT NULL UNIQUE
--或者 UNIQUE KEY gradeName (gradeName)
);
(''')

常规索引

作用:快速定位特定的数据
注意:

  • index和key都能添加常规索引
  • 应添加在查询找条件的字段
  • 不宜添加过多的常规索引,影响数据的插入、修改和删除操作

(''')
CREATE TABLE result(
--相关创建操作
INDEX/KEY ind (studentNo,subjectNo) --创建表时添加
);
--创建表后添加
ALTER TABLE result ADD INDEX/KEY ind (studentNo,subjectNo);
(''')

全文索引

作用:快速定位特定数据

  • 只能用于MyISAM类型的数据表
  • 只能用于CHAR、VARCHAR和INT数据列数据
  • 适用大型数据集

索引准则

  • 索引不是越多越好
  • 不要对经常变动的数据添加索引
  • 小数据量的表建议不要添加索引
  • 索引一般应添加在查找条件的字段中

索引的数据结构

-- 我们可以在创建上述索引的时候,为其指定索引类型,分两类
hash类型的索引:查询单条快,范围查询慢
btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)

-- 不同的存储引擎支持的索引类型也不一样
InnoDB 支持事务,支持行级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
MyISAM 不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
Memory 不支持事务,支持表级别锁定,支持 B-tree、Hash 等索引,不支持 Full-text 索引;
NDB 支持事务,支持行级别锁定,支持 Hash 索引,不支持 B-tree、Full-text 等索引;
Archive 不支持事务,支持表级别锁定,不支持 B-tree、Hash、Full-text 等索引;

posted @ 2020-06-24 16:00  Noirz  阅读(136)  评论(0编辑  收藏  举报