mysql_事务
事务是针对数据的,不是针对结构的
存储引擎innodb支持事务,myisam不支持事务
需求:有一张银行账户表,有A用户给B账户转账,A账户减少,B账户增加,但是A操作之后断电。
解决方案:A减少钱,但是不立即减少钱,B收到钱后,同时修改数据库表
事务安全:
事务transaction:一系列要发生的连续的操作
事务安全:一种保护连续操作同时满足(实现)的一种机制
事务安全意义:保证数据操作完整性
-- 创建一个账户表
create table my_account(
number varchar(16) not null unique comment '账户',
name varchar(20) not null,
money decimal(10,2) default 0.0 comment '账户余额
) charset utf8;
insert into my_account values
('0000000000000001','张三',1000),
('0000000000000002','李四',2000);
alter table my_account add id int primary key auto_increment first;
UPDATE my_account set money = money-1000 where id=1;
事务操作:
事务操作分为两种:自动事务(默认的),手动事务
手动事务:操作流程
1、开启事务:告诉系统一下所有写操作,不要直接写入数据表,先存放到事务日志
start transaction;
2、事务操作:
a)李四账户减少
update my_account set money = money-1000 where id=2;
b)张三账户增加
update my_account set money = money+1000 where id=1;
3、关闭事务:选择性的将日志文件中操作的结果保存到数据表(同步)或者说直接清空事务日志(原来操作全部清空)
a)提交事务:同步数据表(操作成功)
commit;
b)回滚事务:直接清空日志表(操作失败)
rollback;
事务原理:
事务开启之后,所有操作都会保存到事务日志,只有得到commit命令才会同步到数据库,其他任何情况都会清空
事务回滚点:
回滚点:在某一个成功操作完成后,后边操作可能成功或失败,但是不管成功还是失败,前面操作都已成功,可以再当前成功为止,设置一个点:可以供后续失败操作返回到该位置 ,而不是返回所有操作,这个点称为回滚点
设置回滚点语法:savepoint 回滚点名字
回到回滚点语法:rollback to 回滚点名字
--回滚点操作
start transaction;
-- 发工资
update my_account set money = money + 10000 where id = 1;
-- 设置回滚点
savepoint sp1;
-- 扣税,扣错了
update my_account set money = money - 10000*0.05 where id = 2;
--回滚到回滚点
rollback to sp1;
-- 继续操作
update my_account set money = money - 10000*0.05 where id = 1;
-- 查看结果
select * from my_account;
-- 提交
commit;
自动事务:
在mysql中,默认的都是自动事物,用户操作完会立即同步到数据库表中
自动事物:系统通过autocommit变量控制
show variables like 'autocommit';
关闭自动事物:
set autocommit = 0;
再次直接写操作,需要手动处理,commit提价,rollback回滚
通常都会使用自动事物
事物特性:
事物四大特性:ACID
A:atomic原子性,事物的整个操作是一个整体,不可分割,要么全部成功,要么全部失败;
C:consistency:一致性,事物操作的前后,数据表中的数据没有变化
I:isolation,隔离性,事物操作是相互隔离,不受影响的
D:durability:持久性,数据一旦提交,不可改变,永久的改变数据表数据
锁机制:innodb,默认是行锁,但是如果在事物操作的过程中,没有使用到索引,那么系统会自动全表检索数据,自动升级为表锁
行锁:只有当前行被锁住,别的用户都不能操作
表锁:整张表被锁住,别的用户都不能操作
mysql_事务的更多相关文章
- MySQL_事务没有提交导致 锁等待 Lock wait timeout exceeded
java.lang.Exception:### Error updating database. Cause: java.sql.SQLException: Lock wait timeout ex ...
- MySQL_事务(四大特性)
本文转载:https://www.cnblogs.com/kismetv/p/10331633.html 事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段.本文将首 ...
- Mysql_事务_存储过程_触发器
一.什么是事务? 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言( ...
- 07 MySQL_事务
事务 事务( transaction) 是数据库中执行同一业务多条SQL语句 工作单元,事务可以保证多条SQL语句全部执行成功或全部执行失败 和事务相关的SQL语句: 验证事务: 1. 创建表: cr ...
- MySQL_视图/触发器/事务/存储过程/函数
视图.触发器.事务.存储过程.函数 视图 视图是一个虚拟表(非真实存在),其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集,可以将该结果集当作表来使用 #创建视 ...
- MySQL_(Java)【事物操作】使用JDBC模拟银行转账向数据库发起修改请求
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- SQLServer事务同步下如何收缩日志
事务同步是SQLServer做读写分离的一种常用的方式. 随着业务数据的不断增长,数据库积攒了大量的日志,为了腾出硬盘空间,需要对数据库日志进行清理 订阅数据库的日志清理 因为订阅数据库所有的数据都来 ...
- 事务日志已满,原因为“ACTIVE_TRANSACTION”
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 异常处理汇总-数据库系列 http://www.cnblogs.com/dunitia ...
随机推荐
- c# Parallel.For 并行编程 执行顺序测试
因为有个for 实际执行结果尽管是按照for里边的顺序执行,但处理器让哪个分线程先执行,谁先处理完就不一定了. 对于要求结果需要先后顺序的,比如对text内容的操作, 用并行 Parallel.For ...
- js倒计时跳转页面实现
- LOADRUNNER重装经验
1 装了LR的机器最好不要装UFT,两个工具共用一个配置文件,容易冲突. 2 LR11录制脚本时,支持的浏览器有:IE8及以下版本.FIREFOX,用哪个浏览器录制就要在操作系统中将其设置为默认浏览器 ...
- iOS.AutomatePackageBuild.0-Resource-List
1. xcodebuild xcodebuild: 构建Xcode project和workspace. 2. TN2339: Building from the Command Lline with ...
- LibreOJ #6008. 「网络流 24 题」餐巾计划 最小费用最大流 建图
#6008. 「网络流 24 题」餐巾计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- IOS初级:UIView和UIButton
AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDict ...
- SpringBoot中文乱码解决方案
转载:https://blog.csdn.net/wangshuang1631/article/details/70753801 方法一,修改application.properties文件 增加如下 ...
- 过河卒(NOIP2002)
题目链接:过河卒 直接模拟?会T掉60分. 所以我们可以采用递推,怎么想到的? 因为卒子只能向下或向右走,所以走到一个点的方法数,等于走到它上面点的方法数加上走到它左边点的方法数,这样就可以地推了. ...
- 20155312 2016-2017-2 《Java程序设计》第五周学习总结
20155312 2016-2017-2 <Java程序设计>第五周学习总结 课堂笔记 十个基本类型 命令:ascii打印ascii值, od -tx1 Test.java用十六进制查看代 ...
- django之http
一 http协议介绍 http协议(Hyper Text Transfer Protocol):超文本传输协议,是基于应用层的面向对象协议,靠tcp协议和IP来传输数据,请求和响应是http协议的基本 ...