MySQL之事务和索引

事务

什么是事务(Transaction)

事务是多条SQL语句同时执行。如果其中有出错,则全都被取消。

事务的原则(ACID)

  1. 原子性(atomicity)

    一个事务是一个不可分割的工作单位,事务所有操作要么都做,要么都不做,不能停滞在中间某个环节。事务执行过程中出错,则会发生回滚操作。

  2. 一致性(consistency)

    事务必须保持系统一致性状态。以转账为例,假如有两个账户,每个账户100元,总额200元,无论这两个账户之间发生怎样的交易,比如A账户转账给B账户5元,B账户转账给A账户10元,两个账户总额还是200元。这就体现了一致性。

  3. 隔离性(isolation)

    针对多个用户同时操作,主要排除当前事务对其他事务的影响。

  4. 持久性(durability)

    持久性也称永久性(permanence),事务结束后的数据不随外界因素导致数据丢失。若事务没有提交则恢复到原状,反之则持久化到数据库。事务提交不可逆。

事务的隔离级别:

脏读:一个事务读取到了另一个事务未提交的数据操作结果。这是相当危险的,因为很可能所有的操作都被回滚

不可重复读:一个事务对同一行数据重复读取两次,但是却得到了不同的结果。包括虚读和幻读。

索引

什么是索引(index)

索引是帮助MySQL高效获取数据的数据结构。索引相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

索引的作用

  1. 提高查询速度
  2. 确保数据的唯一性
  3. 构建表与表的之间的连接,实现表与表之间的参照完整性

索引的分类

  1. 主键索引 (Primary Key)

主键:某个属性(列)能被唯一标识,不重复。

create table `student`(
  `id` int(6) primary key,
  `name` varchar(3)
)
​
--或 create table `student`(
  `id`int(6),
  `name` varchar(3),
  primary key(`id`)
)

 2.唯一索引 (Unique)

避免与同一个表中某属性的值重复。可能有多个。

create table `student`(
    `id` int(6) primary key,
    `name` varchar(3) not null unique
    --或 unique key `name`(`name`)
)

3.常规索引 (Index)

快速查找数据

create table `student`(
     -- 省略一些代码
  index/key `ind` (`studentNo`,`subjectNo`) -- 创建表时添加
)
-- 创建后添加
alter table`result` ADD INDEX `ind`(`studentNo`,`subjectNo`);

4.全文索引 (FullText)

百度/谷歌搜索:全文搜索,能快速查找数据,适合大型数据查找                                                                                                     

方法:ALTER TABLE在已存在的表上创建索引
       ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX
                            索引名 (字段名[(长度)] [ASC |DESC]) ;
--alter table `student` ADD FULLTEXT INDEX `studentname` (`StudentName`);

索引的准则

  1. 索引不是越多越好

  2. 不要对经常变动的数据加索引

  3. 小数据量的表建议不要加索引

  4. 索引一般应加在查找条件的字段

猜你喜欢

转载自blog.csdn.net/ijwwio/article/details/106240474