sql-5-事务,索引

事务

1、ACID概念

  • 原子性(Atomicity)

    • 要么都成功,要么都失败
  • 一致性(consistency)

    • 事务前后的数据完整性保持一致
  • 持久性(Durability)

    • 事务一旦提交则不可逆,持久保存到数据库中(事务一旦提交,即使立刻关闭服务器也会持久保存)
  • 隔离性(Isolation)

    • 多个用户或多个事务同时进行时,相互不影响

2、四种隔离级别

推荐:https://www.cnblogs.com/balfish/p/8298296.html

  • 脏读
    • 只一个事务读取了另外一个事务未提交的数据。
  • 不可重复读
    • 在一个事务内读取表中的一行数据,多次读取结果不一样(因为别人提交了数据)
  • 虚读(幻读)
    • 是指一个事务读取了别的事务插入的数据,导致前后读取不一致。

3、事务处理操作顺序

-- mysql时默认开始事务自动提交的
set autocommit = 0;
set autocommit = 1;

-- 事务开启
-- 标记一个事务的开始,从这个之后的sql都在一个事务内了
start transaction;
insert xx;
insert xx;

-- 提交:之后就会持久化
commit;

-- 回滚:提交失败之后的处理,还原处理前数据
rollback

-- 结束后需要开启事务自动提交

image-20210207223213012

4、模拟场景

-- 创建shop数据库
CREATE DATABASE `shop` CHARACTER SET utf8 COLLATE utf8_general_ci;
USE  shop;

-- 创建表单
CREATE TABLE `account`(
	`id` INT(3) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(20) NOT NULL ,
	`money` DECIMAL(9,2) NOT NULL,
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 输入原始数据
INSERT INTO `account`(`name`,`money`)
VALUES('A',1000.00),
('B',2000.00);

-- 正式开始
SET autocommit=0;  -- 关闭自动提交

START TRANSACTION;  -- 开启一个事务

UPDATE account
SET money=money-200
WHERE `name`='A';
UPDATE account
SET money=money+200
WHERE `name`='B';

COMMIT;  --认为数据改好就可以提交了,一旦提交不能回复
ROLLBACK;  -- 只要觉得数据改的不好,可以直接回到原始状态

SET autocommit=1;  --数据改好之后需要把自动提交打开

索引

mysql定义:索引(index)是帮助mysql高效获取数据的数据结构

提取句子主干,就可以得到索引的本质:索引是数据结构

1、索引的分类

  • 主键索引(primary key)

  • 唯一索引(unique key)
  • 常规索引(key/index)
  • 全文索引
posted @ 2021-06-07 17:45  Coder-Wang  阅读(44)  评论(0编辑  收藏  举报