首页 > 数据库 >数据库基础操作 - 4

数据库基础操作 - 4

时间:2023-02-08 19:33:19浏览次数:53  
标签:autocommit SET -- money 数据库 基础 提交 操作 事物

6、事物

6.1、什么是事物

要么都成功,要么都失败

一一一一一

1、SQL执行 A 给 B 转账 A 1000 --> 200 B 200

2、SQL执行 B 收到 A 的钱 A 800 B 400

一一一一一

将一组SQL放在一个批次中去执行

事物原则:ACID 原子性,一致性,隔离性,持久性 (脏读,不可重复读,幻读)

 

原子性:要么都成功,要么都失败。

一致性:事物前后的数据完整性要保证一致。(例:两个人转账总和不会变)

隔离性:事物的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事物,不能被其他事物的操作数据所干扰,事物之间要相互隔离。

持久性:事物一旦提交则不可逆,被持久化到数据库中!

 

隔离所导致的一些问题:

脏读:一个事物读取了另一个事物未提交的数据

不可重复读:在一个事物内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)

虚读(幻读):是指在一个事物内读取到了别的事物插入的数据,导致前后读取不一致(一般是行影响,多了一行)

 

执行事物

-- ========= 事物 ============

-- mysql 是默认开启事物自动提交的
SET autocommit = 0 /* 关闭 */
SET autocommit = 1 /* 开启(默认的) */

-- 手动处理事物

-- 事物开启
START TRANSACTION  -- 标记一个事物的开始,从这个之后的SQL 都在同一个事物内
-- 举例代码
INSERT xxx
INSERT xxx

-- 提交:持久化(成功!)
COMMIT
-- 回滚:回到原来的样子(失败!)
ROLLBACK

-- 事物结束
SET autocommit = 1  -- 开始自动提交

-- 此处了解即可
SAVEPOINT 保存点名  -- 设置一个事物的保存点
ROLLBACK TO SAVEPOINT 保存点名  -- 回滚到保存点
RELEASE SAVEPOINT 保存点名  -- 撤销保存点

 

模拟场景

-- ======= 转账 =========
CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci
USE shop

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';  -- A 减 500
UPDATE `account` SET money = money + 500 WHERE `name` = 'B';  -- B 加 500

COMMIT;  -- 提交事物,就被持久化了
ROLLBACK;  -- 回滚

SET autocommit = 1;  -- 恢复自动提交
 

标签:autocommit,SET,--,money,数据库,基础,提交,操作,事物
From: https://www.cnblogs.com/jiaxing-java/p/17103060.html

相关文章

  • Java基础知识点(idea的项目结构、制表符、变量以及其使用
    1.idea的项目结构;project(项目)、module(模块)、package(包)、class(类)​2.制表符;\t;再打印的时候,把前面字符串的长度补齐到8,或者8的整数倍。最少补一个空格,最多补8个空格......
  • 利用AutoUpgrade工具升级数据库
    0.当升级到12cR2及以上的版本时,可以使用AutoUpgrade工具来完成升级工作。具体可以参考MOS文档AutoUpgradeTool(DocID2485457.1)。在本示例中,源数据库的版本为:11.2.0.4......
  • 软件测试|一步到位教会你Python字典操作(一)
    字典(dict)是python中的基础数据类型之一,字典的设计并不复杂,我们经常会用到这种数据类型。同时,字典也有一些比较实用的情景。学习任何一种编程语言,基础数据类型都是必备的......
  • linux 基础(6)简单认识 bash
    shell和bash是什么?shell是一种应用程序,在这个程序里输入文字指令,系统就会做出响应的操作。这个“壳程序”是我们使用系统各种功能的接口,学会了shell就是学会操作li......
  • 算法基础
    参考:csdn,沓沓781,http://t.csdn.cn/HG47y 函数基础定义一个函数包括:返回类型、函数名称、形参列表、函数体例如:intsum(intn){intsum=0;for(......
  • 进程基础知识
    程序和进程程序:(文件)进程:(资源)并行与并发并行:同一时刻,有多条指令在多个处理器上同时执行并发:在同一时刻只能有一条指令执行,但多个进程指令被快速轮换,使得宏观上具有......
  • 程序员必备的数据库知识 2:Join 算法
    前言连接(Join)是关系数据库重要特性,它和事务常被作为数据库与文件系统的两个重要区别项。程序员江湖一直流传着某某baba的神秘开发宝典,其中数据库部分有重要一条避免过多表......
  • Mysql数据库备份恢复
    一、使用musqldump对数据库、数据库表、一个数据库多个表、所以数据库备份、模拟数据丢失二、配置mysql数据库开启二进制日志功能,配置二进制日志切割,配置跟二进制恢复数据,居......
  • 程序员必备的数据库知识 2:Join 算法
    前言连接(Join)是关系数据库重要特性,它和事务常被作为数据库与文件系统的两个重要区别项。程序员江湖一直流传着某某baba的神秘开发宝典,其中数据库部分有重要一条避免过多......
  • 旺店通·企业奇门与金蝶云星空对接集成查询货品品牌打通预置基础资料1新增
    旺店通·企业奇门与金蝶云星空对接集成查询货品品牌打通预置基础资料1新增对接系统:旺店通·企业奇门慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS、SaaS......