目录
一.索引
1.什么是索引
索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。
2.索引的作用
- 可以快速定位,检索数据
- 可以提高数据库的性能,如果查询数据的时间太长,可以通过创建索引提高查询效率
3.索引的使用场景
如果需要对数据库中的某列或者某几列想要创建索引,需要考虑以下几点(如果不考虑以下几点,可能提高不了查询的效率):
- 数据量较大,经常对这些数据进行条件查询。
- 对创建索引的列修改插入频率较低。
- 索引会占用磁盘空间,在创建索引的时候需要考虑磁盘空间是否充足。
- 根据where条件查询来创建合适的索引。
- 索引也不是创建的越多越好,数据量大的时候更新索引也消耗时间
注意:对于有些查询结果使用不到索引如:给name创建一个索引,当name is null 或者
name like % 某%,就使用不到索引。
4.索引的简单使用
对于一些约束,会自动创建对应列的索引,如主键约束,唯一键约束,外键约束。
(1)查看索引
语法:
show index from 表名;
(2)创建索引
语法:
create index 索引名 on 表名(字段名);
(3)删除索引
语法:
drop index 索引名 on 表名;
二.事务
1.什么是事务以及为什么使用事务
(1)事务的概念
事务(具有原子性)指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。
(2)使用事务的原因
在某些场景下,如果没有事务就会出现很大的问题。例如银行的转账问题。
2.如何开启事务
(1)开启事务的三部曲
- 开启事务:start transaction;
- 执行多条SQL语句
- 回滚或提交 rollback(全部失败)/commit(全部成功)。
(2)开启事务的例子
初始化的账户
drop table if exists accout;
create table accout(
id int primary key auto_increment,
name varchar(20) comment '账户名称',
money decimal(11,2) comment '金额'
);
insert into accout(name, money) values
('张三', 3000),
('李四', 3000);
开启事务后的转钱操作
start transaction;
-- 张三账户减少2000
update accout set money=money-2000 where name = '张三';
-- 李四账户增加2000
update accout set money=money+2000 where name = '李四';
-- commit执行完成后转账就会成功,数据库中的数据就会得到修改
commit;
使用commit之前
使用commit之后
开启事务后,如果没有执行到commit,那么数据库中的数据就没有得到修改,虽然在当前数据库中显示钱已经发生了变化,但是再打开另一个数据库端口重新进入就会发现没有变化,这就是开启事务的好处,没有执行成功就不会修改数据库中的数据。
3.事务的四大特性
- 原子性:对于一组操作(主要为更新),要么全部成功,要么全部失败。
- 一致性:一个事务里面,多次查询到的结果都是一致的。
- 隔离性:不同事务,查询/修改的数据是互相隔离的。一个事务没有提交/回滚之前,修改数据只有自己可以看到。
- 持久性:事务提交后,数据会持久化到硬盘中。