MySQL的索引和事务笔记

-- 索引是最简单的提高检索速度的方法,用空间换时间。当对没有索引的表进行查询时我们需要遍历整张表,很耗时,对于加了索引的数据表可以提高查询效率,可以用一个数据结构比如二叉排序树或者b、b+树,对这列数据进行排序,可以提高查询效率
-- 索引分为主键索引,主键自动的为主索引
-- 唯一索引 unique
-- 普通索引 index
-- 全文索引适用于MyISAM,一般开发使用solr和ElasticSearch(ES)
create table t25
(
id int,
name varchar(25)
);
show indexes from t25
-- 添加唯一索引,一列可以添加多个索引
create unique index id_index on t25(id)
create index id_in on t25(id)
-- 如果某列的值是不会重复的,则优先选择nuique索引,否则使用普通索引
alter table t25 add index id_in3(id)

create table t26
(
id int,
name varchar(25)
);
alter table t26 add primary key(id)
show index from t26
show indexes from t26
show keys from t26
desc t26
-- 较频繁的作为查询条件字段应该创建索引
-- 唯一性太差的字段不适合单独创建索引 比如性别那一列
-- 更新非常频繁的字段不适合创建索引
-- 不会出现在where子句中的字段不该创建索引

-- 事务
-- 事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dm语句要么全部成功,要么全部失败。如:转账就要用事务来处理,来保证数据的一致性
create table t27
(
id int,
name varchar(32)
);
start transaction;
savepoint a;
insert into t27 values(1,'tom');
insert into t27 values(2,'marry');
select * from t27;
savepoint b;
insert into t27 values(3,'jack');
select * from t27;
-- 事务回滚
rollback to b
select * from t27;
rollback to a;
select * from t27;
commit
-- 如果不开启事务,默认情况下dml操作是自动提交的,不能回滚
-- 如果开启一个事务,没有创建保存点 可以执行 rollback(什么也不加),默认回退到事务开始的状态
-- 可以在事务没有提交时创建多个保存点,可以选择回退到任意保存点
-- MySQL的事务机制需要innodb的存储引擎才可以使用,myisam不好用
-- 事务开启命令 start transaction 、set autocommit=off

-- 事务隔离级别介绍
-- 1、多个连接开启各自事务,操作数据库时,数据库系统需要负责隔离操作,以保证各个连接在获取数据是的准确性
-- 脏读:一个事务读取另一个事务尚未提交的修改
-- 不可重复度:同一查询在同一事务中多次进行,由于其他提交事务所做的修改或者删除,每次返回不同的结果集
-- 幻读:同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读

你可能感兴趣的:(mysql,笔记,数据库)