事务是针对数据的,不是针对结构的

存储引擎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_事务的更多相关文章

  1. MySQL_事务没有提交导致 锁等待 Lock wait timeout exceeded

    java.lang.Exception:### Error updating database.  Cause: java.sql.SQLException: Lock wait timeout ex ...

  2. MySQL_事务(四大特性)

    本文转载:https://www.cnblogs.com/kismetv/p/10331633.html 事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段.本文将首 ...

  3. Mysql_事务_存储过程_触发器

    一.什么是事务? 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言( ...

  4. 07 MySQL_事务

    事务 事务( transaction) 是数据库中执行同一业务多条SQL语句 工作单元,事务可以保证多条SQL语句全部执行成功或全部执行失败 和事务相关的SQL语句: 验证事务: 1. 创建表: cr ...

  5. MySQL_视图/触发器/事务/存储过程/函数

    视图.触发器.事务.存储过程.函数 视图 视图是一个虚拟表(非真实存在),其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集,可以将该结果集当作表来使用 #创建视 ...

  6. MySQL_(Java)【事物操作】使用JDBC模拟银行转账向数据库发起修改请求

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...

  7. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  8. SQLServer事务同步下如何收缩日志

    事务同步是SQLServer做读写分离的一种常用的方式. 随着业务数据的不断增长,数据库积攒了大量的日志,为了腾出硬盘空间,需要对数据库日志进行清理 订阅数据库的日志清理 因为订阅数据库所有的数据都来 ...

  9. 事务日志已满,原因为“ACTIVE_TRANSACTION”

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 异常处理汇总-数据库系列  http://www.cnblogs.com/dunitia ...

随机推荐

  1. React-router4 第三篇 BasicURL ParametersRedirects (Auth) 谷歌翻译:重定向

    依旧是地址 https://reacttraining.com/react-router/web/example/auth-workflow 上来一步走 先导入模块 import React, { P ...

  2. 1F - A+B for Input-Output Practice (III)

    Your task is to Calculate a + b. Input Input contains multiple test cases. Each test case contains a ...

  3. URLEncoder.encode转译后“空格”变“加号”的问题的解决方案

    我用dst_fname=URLEncoder.encode(dst_fname);对字符串dst_fname进行编码,但是发现空格全部都变成了加号,我们提需求的傻B非得要空格的,但是不编码有很多非常特 ...

  4. RNA测序研究现状与发展

    RNA测序研究现状与发展 1 2,584 A+ 所属分类:Transcriptomics   收  藏 通常来说,某一个物种体内所有细胞里含有的DNA都应该是一模一样的,只是因为每一种细胞里所表达的R ...

  5. linux学习第二天 (Linux就该这么学)

    2018年11月10日,今天是学习的第二天 今天学习了安装vmware workstation12的安装及怎么安装 redhat7系统,在新建虚拟机时注意要选择“稍后安装操作系统”要vmwark wo ...

  6. IntelliJ IDEA 配置svn

    1.启用版本控制 2.在弹出的框中选择svn 3.下载并解压VisualSVN  下载地址:http://subversion.apache.org/packages.html#windows 4.i ...

  7. JSON数据映射之元素可见控制

    1.效果: 2.demo 源码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  8. fetch获取json的正确姿势

    fetch要求参数传递,遇到请求无法正常获取数据,网上其他很多版本类似这样: fetch(url ,{ method: 'POST', headers:{ 'Accept': 'application ...

  9. SQL查找指定行的记录

    select top 1 * from (select top 4 * from T_GasStationPrice order by EnableTime) a order by EnableTim ...

  10. 【算法专题】工欲善其事必先利其器—— 常用函数和STL

    一.    常用函数 #include <stdio.h> int getchar( void );               //读取一个字符, 一般用来去掉无用字符 char *ge ...