(三)事务和索引

TCL语言

transaction controller language 事务控制语言

存储引擎

INNODB MYISAM
使用 默认使用 早些年使用
事务支持 支持 不支持
数据行锁定 支持 不支持(表锁定,效率低)
外键约束 支持 不支持
表空间的大小 较大 较小

事务

什么是事务

事务就是用户定义的一系列数据库操作,这些操作可以视为一个逻辑处理工作单元,要么全部执行,要么全部不执行。

事务使用步骤

set autocommit=0;
start transaction;【可选】
.....
commit/rollback;

事务的四大特性

ACID

原子性:要么都做,要么都不做

一致性:操作前后的状态是一致的

持久性:

  1. 事务如果提交成功,持久化到数据库
  2. 事务没有提交成功,恢复到原状
  3. 事务一旦提交就不可逆了

隔离性:多个用户不会互相影响

事务的隔离级别

演示隔离级别:视频

脏读:一个事务A读取到另一个事务B未提交的数据,若另一个事务B回滚,则事务A读到脏数据

不可重复读:没有脏读的情况,事务B未提交,事务A读到数据不变。但是B提交后,事务A再次读取,发现前后两次提交数据不一样。

幻读:没有不可重复读,解决了更新时候的问题,但是插入或删除没有解决(B提交前后数据不一致)

查看当前隔离级别
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
将当前会话设置成最低的隔离级别
set session transaction isolation level read uncommitted;
 

Mysql支持4种事务隔离级别,Mysql默认的事务隔离级别为repeatable read

事务隔离级别 脏读 不可重复读 幻读
read uncommitted
read committed
reaptable read
serializable

索引

官网对索引的定义:index 是帮助mysql高效获取数据的数据结构

讲索引的博客:https://blog.codinglabs.org/articles/theory-of-mysql-index.html

索引的分类

  • 主键索引(primary key)
    • 唯一的标识,主键唯一且非空
  • 唯一索引(unique key)
    • 避免重复的列出现,一个表唯一索引可以有多个
  • 常规索引(key/index)
    • 默认的,index,key 关键字来设置
  • 全文索引(full_text)
    • 快速定位数据
--查看一个表的所有索引
SHOW INDEX FROM student
--添加一个全文索引(注意括号里面不能用student.`StudentName`)
ALTER TABLE `student` ADD FULLTEXT INDEX `fi_student_name`(`StudentName`);
--全文索引
EXPLAIN SELECT * FROM student WHERE MATCH(studentName) AGAINST('小');

加100 0000数据

DELIMITER $$ -- 写函数之前必须写
CREATE FUNCTION mock_data()
RETURNS INT
BEGIN
   DECLARE num INT DEFAULT 1000000;
   DECLARE i INT DEFAULT 0;
   WHILE i<num DO
	INSERT INTO app_user(`name`,`email`,`phone`,`gender`,`password`,`age`)
	VALUES(
	CONCAT('用户',i),'1014523451@163.com',
	CONCAT('18', FLOOR(RAND()*(999999999-100000000)+100000000)),
	FLOOR(RAND()*2),UUID(),FLOOR(RAND()*100)
	);
	SET i=i+1;
   END WHILE;
   RETURN i;
END;
SELECT mock_data()
CREATE INDEX id_app_user_name ON app_user(`name`);

image-20200613211641357

索引原则

  1. 索引在小数据量不明显,在大的数据量明显

  2. 索引不是越多越好

  3. 索引一般加在常用来查询的字段上

posted @ 2020-10-25 14:14  DJ同学  阅读(70)  评论(0编辑  收藏  举报