MySQL006事务和索引

事务

保证一个业务逻辑的完整操作

事务可以完成回退的功能,保证业务逻辑的正确性

事务的四大特性

  • 原子性
  • 一致性(几个并行的事务,执行结果必须与按某一顺序串行执行的结果一致)
  • 隔离性(A向C转账,B向C转账,C不会因为AB的转账不知道现在有多少钱)
  • 持久性

使用事务的条件

  • 数据库引擎必须是innodb或bdb

使用事务的情况

  • insert
  • update
  • delete

事务的三个命令

  • begin
  • commit
  • rollback
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
数据库里有一条数据,进行更新操作
1 郭靖

step000 开启事务
begin;

step001_1 此句话会把 1 郭靖这条数据锁起来
step001_2 在临时的一个表里(内存级的临时表) 将数据改成 1 效果
update students set name='小郭' where id=1;


此时你有两种操作 一个是commit一个是rollback

commit操作
step002_0 如果你此时执行一个commit操作
step002_1 将临时表的操作更新到实际的表
step002_2 取消原表的锁定状态

rollback操作
step002_0 会将begin之后所有操作丢弃
step002_1 取消原表的锁定状态

索引

如何在英语字典里找 book单词? 查找b开头所在页码

  • 当数据库数据量很大的时候,查找数据就会变得很慢
  • 索引能提高数据访问性能
  • 主键和唯一索引,都是索引,可以提高查询速度
  • 索引的建立会占据一定的空间(物理开销)

默认所以以主键来存的,而且所以要占据一定的空间(物理开销),你可以建立索引,但是建立多了就会占据更多的空间

选择列的数据类型

  • 越小的数据类型越好
  • 简单的数据类型更好
  • 避免用null值

操作

  • 索引分为单列索引和组合索引

查看索引

1
show index from students;

建立索引

1
2
3
4
5
create index 索引名 on 表名(字段名(长度,如果是数组就不用指定))


多个字段索引
create index 索引名 on 表名(name,gender);

删除索引

1
drop index [索引名] on 表名

索引的缺点

  • 虽然提升了查询速度,同时降低了更新表的速度,如对表进行insert,update,delete(因为更新表的时候数据库不仅仅保存数据,还要保存索引信息)
  • 建立索引会占用磁盘空间的索引文件