TCL语言
transaction controller language 事务控制语言
存储引擎
INNODB | MYISAM | |
---|---|---|
使用 | 默认使用 | 早些年使用 |
事务支持 | 支持 | 不支持 |
数据行锁定 | 支持 | 不支持(表锁定,效率低) |
外键约束 | 支持 | 不支持 |
表空间的大小 | 较大 | 较小 |
事务
什么是事务
事务就是用户定义的一系列数据库操作,这些操作可以视为一个逻辑处理工作单元,要么全部执行,要么全部不执行。
事务使用步骤
set autocommit=0;
start transaction;【可选】
.....
commit/rollback;
事务的四大特性
ACID
原子性:要么都做,要么都不做
一致性:操作前后的状态是一致的
持久性:
- 事务如果提交成功,持久化到数据库
- 事务没有提交成功,恢复到原状
- 事务一旦提交就不可逆了
隔离性:多个用户不会互相影响
事务的隔离级别
演示隔离级别:视频
脏读:一个事务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`);
索引原则
-
索引在小数据量不明显,在大的数据量明显
-
索引不是越多越好
-
索引一般加在常用来查询的字段上