1.什么是事务
要么都成功,要么都失败(银行转账 A给B 转账)
将一组SQL放在一个批次中去执行
事务原则:ACID 原则 原子性,一致性,隔离性,持久性 (脏读,幻读)
-
-
原子性:要么都成功,要么都失败
-
一致性:事务前后的数据完整性要保持一致 1000元
-
持久性(事务提交):事务一旦提交则不可逆,被持久化到数据库中!
-
隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间要相互隔离。
-- mysql 是默认开启事务自动提交的
SET autocommit =0 /*关闭*/
SET autocommit =1 /*开启(默认)*/
--1. 手动处理事务
SET autocommit =0 -- 关闭自动条件
--2. 事务开启
START TRANSACTION -- 标记一个事务的开始,从这个之后的sql 都在同一个事务内
--3. 提交(成功)
COMMIT
--3. 回滚(失败) :回到的原来的样子(失败!)
ROLLBACK
--4. 事务结束
SET autocommit=1 -- 开启自动提交
CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `account`(
id INT(3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
money DECIMAL(9,2) NOT NULL,
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO account(`name`,`money`)
VALUES ('A',2000.00),('B',10000.00)
-- 模拟转账:事务
SET autocommit =0; -- 关闭自动提交
START TRANSACTION -- 开启一个事务
UPDATE account SET money=money -500 WHERE `name`='A';
UPDATE account SET money=money +500 WHERE `name`='B';
COMMIT; -- 提交事务,就被持久化了
ROLLBACK; -- 回滚
SET autocommit=1; -- 恢复默认值
2.索引
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 0.5s 0.00001s
一个表中,主键索引只能有一个,唯一索引可以有多个
-
-
主键索引(PRIMARY KEY):唯一的标识,主键不可重复,只能有一个列作为主键
-
唯一索引(UNIQUE KEY):避免重复的列出现,唯一索引可以重复,多个列都可以标识位唯一索引
-
常规索引(KEY/INDEX):默认的,index。key关键字来设置
-
全文索引(FullText):在特定的数据库引擎下才有,MyISAM,快速定位数据
索引原则
![]()