MySQL索引事务

1. 索引

索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。
它的作用类似于书籍目录,可用于快速定位、检索数据。所以它可以极大的提高数据库的性能。
要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:

  • 数据量较大,且经常对这些列进行条件查询。
  • 该数据库表的插入操作,及这些列的修改操作频率比较低。
  • 索引会占用额外的磁盘空间。

1.1 使用

在创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。

  • 查看索引
    show index from 表名;
    例如:查看学生表已有的索引
show index from student;
  • 创建索引
    对于非主键、非唯一约束、非外键的字段,可以创建普通索引。
    create index 索引名 on 表名(字段名);
    例如:创建班级表中,name字段的索引。
create index idx_classes_name on classes(name);
  • 删除索引
    drop index 索引名 on 表名;
    例如:删除班级表中name字段的索引。
drop index idx_classes_name on classes;

索引保存的数据结构主要为B+树,及hash的方式。

2. 事务

什么是事务?事务是逻辑上的一组操作,例如银行转账操作,这组操作包括 从你的账户扣除转账金额和从对方的账户存入转账金额,要么全部执行成功,要么全部执行失败。
事务的使用
(1)开启事务:start transaction;
(2)执行多条SQL语句
(3)回滚或提交:rollback/commit;
rollback即是全部失败,commit即是全部成功。
测试案例:
创建测试表:

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
('张三', 5000),
('李四', 1000);
start transaction;
-- 张三账户减少2000
update accout set money=money-2000 where name = '张三';
-- 李四账户增加2000
update accout set money=money+2000 where name = '李四';
commit;

假如我们在转账时当系统从张三这边已经扣除了2000元,但是在执行李四账户增加2000元时由于网络波动或者其他一些原因导致这一语句执行失败,导致张三这边已经扣除了2000,但是李四这边却没有收到转账金额,那么这2000元就被系统黑吃了。
事务就是为了解决这一问题,当我们开启事务直到事务结束,中间所执行的多条SQL语句,假如有一条语句执行失败,那么从事务开始到失败之前的语句全部失效,然后我们重新提交,直到这些SQL语句全部执行成功,然后事务结束,数据库将数据存入,那么就可以避免这一类似的问题出现。

你可能感兴趣的:(mysql,数据库,索引,sql)