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#设计模式-1简单工厂模式Simple Factory)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 简单的工 ...
- C# 通过api函数GetPrivateProfileString读取ini文件,取不到值
通过api函数GetPrivateProfileString读取ini文件,取不到值,测试了好长时间,都不行 确认程序,ini文件都没有错误的情况,最后发现是ini文件编码的原因. 将ini文件的编码 ...
- 进化树(phylogenetic trees)
构建进化树的工具有: muscle mega 进化树的可视化: 本地可视化软件 Figtree (网址:http://tree.bio.ed.ac.uk/software/figtree/) 该软件是 ...
- xagrs 指定参数位置
xargs还有指定参数位置的作用.假设我们要将目录下所有的.py文件放到Python目录中去,可以使用命令find . -name '*.py' | xargs -I {} mv {} ./Pytho ...
- js使用sessionStorage、cookie保存token
本文是参考别人的博客写的,图片直接用的别人的 1.Token:token是客户端频繁向服务器端请求数据,服务器频繁的去数据库查询用户名和密码进行对比,判断用户名和密码正确与否,并作出相应的提示,在这样 ...
- Nodejs学习笔记:基础
本文章主要记录Nodejs基础知识点 安装 首先从Node.js官网下载安装包,并添加到环境变量.然后打开命令行,输入 node --version ,可查看版本信息 npm是Node.js的包管理工 ...
- R语言2版本3版本安装
./configure --prefix=/YZpath/public/software/R/R-3.5.0 --with-readline=no --with-x=no make make inst ...
- 如何将service绑入到spring 并且在action中使用
第一步:定制 service接口,为什么用接口我也不清楚 package com.inspur.services; import com.hsp.domain.User; public interfa ...
- Windows 8风格应用-触控输入
参考:演练:创建您的第一个触控应用程序 http://msdn.microsoft.com/zh-cn/library/ee649090(v=vs.110).aspx win8支持多点触摸技术,而我们 ...
- eclipse安装提要
svn 插件安装http://subclipse.tigris.org/update_1.12.x教程地址http://jingyan.baidu.com/article/f71d60376b4c57 ...