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 ...
随机推荐
- 初次搭建spring-boot 整合ssm(有许多小坑)
首先,我是采用官网下载,版本最好选择1.5.16的(这是重点) 下载完毕后,用idea打开解压后的项目. 1.整合spring-mvc 在pom.xml中加入web依赖 <dependency& ...
- 大数加法java版
import java.util.*; import java.math.BigDecimal; public class Numadd{ public static void main(String ...
- PHP编程时的规范化命名
要想成为一名“合格”的程序员,就必须要有良好的编程习惯和规范,这样做的好处有很多,诸如:可以提高代码质量,提高程序的可维护性,提高开发速度和效率等.以下就简要的列出几条日常编写程序时大概要注意的一些“ ...
- 写一个简单的C词法分析器
写一个简单的C词法分析器 在写本文过程中,我参考了<词法分析器的实现>中的一些内容.这里我们主要讨论写一个C语言的词法分析器. 一.关键字 首先,C语言中关键字有: auto.break. ...
- 论坛:Error:No result defined for action cn.itcast.oa.view.action.TopicAction and result
使用了<s:hidden name="forumId" value="#forum.id"/> 可以改为: <s:hidden name=&q ...
- [ES]elasticsearch章3 ES写入过程解析
Elasticsearch的写 Elasticsearch采用多Shard方式,通过配置routing规则将数据分成多个数据子集,每个数据子集提供独立的索引和搜索功能.当写入文档的时候,根据routi ...
- nginx 动静分离 以及 负载均衡配置
测试环境 系统版本:win7 Nginx版本:nginx-1.8.1 Tomcat版本:tomcat-6.0.14 1动静分离配置 Nginx.conf 中 server中 server { list ...
- UVA 10821 Constructing BST
BST: binary search tree. 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...
- javascript声明对象时 带var和不带var的区别
2015/11/25补充: 关于变量声明这里有详细的解释: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Stat ...
- mybatis学习八 事物
1.事物的定义: 是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源. 2,事物的特性: ...