首页 > 数据库 >【十二】MySQL数据库之事物

【十二】MySQL数据库之事物

时间:2023-06-30 20:57:42浏览次数:41  
标签:事务 name age 十二 提交 MySQL employee commit 数据库

【十二】MySQL数据库之事物

事务

【一】什么是事务?

  • 事务是MySQL的一种机制
    • 每开启一个事务
    • 都可以往里放入一系列的SQL语句。
  • 事务是单个逻辑工作单位执行的一系列操作
    • 要么全执行
    • 要么全不执行
  • 每开一个事务
    • 相当于给数据库拍了一张快照
    • 这意味着在提交之前可以回滚
    • 在事务中可以设置多个保存点
    • 然后可以进行回滚到每个保存点
  • 我们默认为每条sql开启事务
    • 并且会在本条sql执行完毕后自动执行commit提交
    • 直接用 SET 来改变 MySQL 的自动提交模式
    • 手动开启的事务里默认不会自动提交。
  • 结束事务可以使用commit和rollback
    • 结束事务会释放事务中所有的锁

【二】事务有哪些特性?

我们可以拿发起一笔转账作为例子来诠释事务的特性

(A)原子性:
  • 事务内部的sql语句是一个不可分割的整体
    • 这一系列的sql语句如果有一条运行失败
    • 则整体都运行失败
  • 比如转账行为(指转账方金额减少和接收方金额增加)
    • 只可能全执行成功或全执行失败,
(C)一致性:
  • 事务执行前后的状态保持一致
    • 和原子性紧密相关
    • 比如张三和李四都有500元的余额
    • 他们余额的总数是1000元
    • 然后开启了一个转账事务
    • 张三给李四转了100元以后
    • 他们各自的余额发生了变化
    • 但他们的总金额仍然保持不变。

另外,在事务发生的前后,数据类型也应该保持一致。

(I)隔离性:
  • 多个事务并发运行
    • 但彼此之间互不影响
    • 比如转账时如果A和B同时各开一个事务给C转账
    • 事务2的B先转账成功
    • 但此时事务1中的A看不到B转账成功的信息
    • 但A转账完
    • C能同时收到A和B的转账
(D)持久性:
  • ⼀个事务被提交(commit)之后
    • 它对数据库中数据的改变是持久的
    • 即使数据库发⽣故障也不应该对其有任何影响。

小实验:验证事务的一致性

准备表:
create table employee(
id int primary key auto_increment,
name varchar(20) not null,
age int(3) unsigned not null default 20
);

insert into employee(name) values
('歪歪'),
('丫丫'),
('丁丁'),
('星星'),
('格格'),
('张野'),
;
update employee set age = 18 where id <=3;
实验:
步骤1 start transaction;select * from employee where name = "dream"; -- 对应的age = 18 start transaction;select * from employee where name = "dream"; -- 对应的age = 18
步骤2 update employee set age=age+1 where name = "egon";commit; -- 修改egon的年龄为19岁,并提交select * from employee where name = "dream"; -- 对应的age变为19
步骤3 -- 在事务二commit之后,重新查询,发现对应的age 仍为18 select * from employee where name = "dream";
步骤4 -- 虽然看到的age仍为18,但因为事务的一致性原则,其实此处的修改是在age=19的基础上进行的update employee set age=age+1 where name = "dream"; -- 查看到age变为20select * from employee where name = "dream";
步骤5 commit;select * from employee where name = "dream"; -- age =20

【三】MySQL开启事务的三种方式

1、隐式开启,隐式提交(默认)

  • 默认情况下,你每敲一条SQL语句,都会开启一个事务。
    • 这条语句一运行完,会自动帮你commit提交
    • 所以平时我们使用update语句修改数据库,都会自动提交。

2、显式开启,显示提交

  • 使用代码 start transaction或者简写为begin。
  • 这样你所写的事务就不会自动触发commit提交
    • 你可以选择手动commit 提交或是rollback回滚。
  • 注意点:
    • 无论是commit还是 rollback,该事务都会结束

3、显示开启,隐式提交

  • 设置参数
Set session autocommit =0
  • 这样设置完,就不会自动提交

总结:

  • MYSQL 默认为每条sql开启事务
    • 并且会在本条sql执行完毕后自动执行commit提交
    • 若想设置手动提交,有两种方式
方式一:直接用 SET 来改变 MySQL 的自动提交模式(下述设置均为会话级别的设置):
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
方式二: 手动开启的事务里默认不会自动提交
  • 手动开启的事务里默认不会自动提交
    • 所以我们可以将要执行的sql语句放在我们自己手动开启的事务里
start transaction;
update test.t1 set id=33 where name = "jack";
commit;

注意:

​ 这种方式在当你使用commit或者rollback后,事务就结束了

​ 再次进入事务状态需要再次start transaction

标签:事务,name,age,十二,提交,MySQL,employee,commit,数据库
From: https://www.cnblogs.com/dream-ze/p/17517786.html

相关文章

  • 【1.0】数据库知识点小结数据库初识
    【1.0】数据库知识点小结数据库初识【一】存储数据的演变过程【1】文件存储随意地存放到一个文件中、数据格式也是千差万别的完全取决于个人【2】软件开发目录规范(1)概要限制了存储数据的具体位置建立专门的文件夹存储数据(2)软件开发目录规范binmain.pycon......
  • 【十五】MySQL数据库之多表查询练习题
    【十五】MySQL数据库之多表查询练习题表结构和数据/*NavicatPremiumDataTransferSourceServer:localhostSourceServerType:MySQLSourceServerVersion:50624SourceHost:localhostSourceDatabase:sqlexamTargetServerT......
  • 【2.0】数据库知识点小结数据库进阶
    【2.0】数据库知识点小结数据库进阶【一】存储引擎日常生活中文件格式有很多,并且针对不同的文件格式会有对应不同的存储方式和处理机制针对不同的数据应该有对应的不同的处理机制存储引擎就是不同的处理机制MySQL主要的存储引擎Innodb是MySQL5.5版本之后的默认存储引......
  • 【一】MySQL数据库之引入
    【一】MySQL数据库之引入【一】数据库管理软件的由来基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没......
  • 【二】MySQL数据库之下载安装
    【二】MySQL数据库之下载安装【1】Window系统(1)安装1、下载MySQLCommunityServer5.7.16http://dev.mysql.com/downloads/mysql/2、解压如果想要让MySQL安装在指定目录那么就将解压后的文件夹移动到指定目录如:C:\mysql-5.7.16-winx643、添加环境变量【右键......
  • 【四】MySQL数据库之MySQL语句初识
    【四】MySQL数据库之MySQL语句初识有了mysql这个数据库软件就可以将程序员从对数据的管理中解脱出来专注于对程序逻辑的编写mysql服务端软件即mysqld帮我们管理好文件夹以及文件前提是作为使用者的我们需要下载mysql的客户端或者其他模块来连接到mysqld然后使用mys......
  • 【三】MySQL数据库之MySQL软件基本管理
    【三】MySQL数据库之MySQL软件基本管理关于Linux版本的基本管理与破解密码详情:【1】登录,设置密码(1)初始状态下,管理员root,密码为空,默认只允许从本机登录localhost(2)设置密码[root@egon~]#mysqladmin-urootpassword"123"(3)设置初始密码由于原密码为空,因此-p可以......
  • 【五】MySQL数据库之库相关操作
    【五】MySQL数据库之库相关操作库相关操作【一】系统数据库information_schema:虚拟库不占用磁盘空间存储的是数据库启动后的一些参数如用户表信息、列信息、权限信息、字符信息等performance_schema:MySQL5.5开始新增一个数据库:主要用于收集数据库服务器性能参数......
  • 【七】MySQL数据库之记录相关操作
    【七】MySQL数据库之记录相关操作记录相关操作【一】介绍MySQL数据操作:DML在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括使用INSERT实现数据的插入UPDATE实现数据的更新使用DELETE实现数据的删除使用SELECT查询数据以及。本节内容包括:......
  • 【八】MySQL数据库之数据库IDE与pymysql模块
    【八】MySQL数据库之数据库IDE与pymysql模块数据库IDE与pymysql模块【一】IDE工具介绍生产环境还是推荐使用mysql命令行但为了方便我们测试可以使用IDE工具在此我们推荐使用Navicat软件或pycharm来连接数据库这样就能更详细直观地查询数据掌握:#1.测试+链接数据......