当前位置: 首页 > news >正文

保险业网站建设dedecms美食网站

保险业网站建设,dedecms美食网站,网站建设与维护 计算机,兰州网站设计厂家前言 在MySQL数据库中#xff0c;事务#xff08;Transaction#xff09;是指一组SQL语句的执行序列#xff0c;这些SQL语句要么全部执行成功#xff0c;要么全部执行失败#xff0c;保证数据库的一致性和完整性#xff1b;用于操作量大、复杂度高的数据。 目录 一、…前言 在MySQL数据库中事务Transaction是指一组SQL语句的执行序列这些SQL语句要么全部执行成功要么全部执行失败保证数据库的一致性和完整性用于操作量大、复杂度高的数据。 目录 一、事务介绍 1. 概念 2. 事务的ACID特点 二、事务间的干扰 1. 脏读 2. 不可重复读 3. 幻读 4. 丢失更新 三、事务的隔离级别 1. 读未提交read uncommitted 2. 读已提交read committed 3. 可重复读repeatable read 4. 串行化serializable 四、事务隔离级别作用范围 1. 查询全局事务隔离级别 2. 查询会话事务隔离级别 3. 设置全局事务隔离级别 4. 设置会话事务隔离级别 五、事务控制语句 1. 控制语句 2. 事务配置一般格式 3. 示例 3.1 提交事务 3.2 回滚事务 3.3 多点回滚 3.4 使用 set 设置控制事务 一、事务介绍 1. 概念 事务是一种机制、一个操作序列包含了一组数据库操作命令并且把所有的命令作为一个整体一起向系统提交或撤销操作请求事务是一个不可分割的工作逻辑单元执行并发操作时事务是最小的控制单元。适用于多用户同时操作的数据库系统的场景通过事务的整体性以保证数据的一致性 2. 事务的ACID特点 事务的ACID是指数据库事务应该具备的四个特性分别是原子性Atomicity、一致性Consistency、隔离性。这四个特性共同构成了事务的ACID属性保证了数据库事务的可靠性、稳定性和一致性。 ① 原子性指事务是一个不可再分割的工作单位事务中的操作要么都发生要么都不发生。如果事务中的任何元素失败则整个事务将失败 ② 一致性指在事务开始之前和事务结束以后数据库的完整性约束没有被破坏。如转账100给对方对方余额多100自己余额少100 ③ 隔离性指在并发环境中当不同的事务同时操纵相同的数据时每个事务都有各自的完整数据空间。当多人操作一张表时只要不提交数据会保持隔离互不干预当有提交后其他未参与的用户就可以看到新增的数据 ④ 持续性在事务完成以后该事务所对数据库所作的更改便持久的保存在数据库之中并不会被回滚。一旦事务提交处理记过都是永久保存在磁盘里 二、事务间的干扰 1. 脏读 读取未提交的数据意味着这些数据并不是最终保留到数据库的数据可能会回滚事务读取的数据就是脏数据。即一个事务读取了另一个事务正在修改但尚未提交的数据。 如图事务B读取了事务A修改却没有提交的数据此时得到的数据就是脏数据。事务B读取发生的情况称为脏读。  2. 不可重复读 前后多次读取数据内容不一致。指在同一个事务中如果读取同一行数据两次可能会得到不同的结果。即一个事务内两个相同的查询却返回了不同数据这是由于其他事务在读取过程中修改并提交了数据造成的。 如图由于事务A在事务B两次读取之间做了修改并提交导致事务B第一次读取到的数据和第二次读取到的数据内容不一致从而形成了不可重复读。 3. 幻读 前后多次读取数据总量不一致。指在一个事务中由于其他事务插入新数据导致同一个查询条件返回不同数量的行的现象。通常发生在读取某个范围内的数据时其他事务在该范围内插入新数据导致第一次读取和第二次读取返回的行数不一致。即事务前后两次读取同一范围这里的范围指行区间的数据后一次读取的总数行和前一次不一致称为幻读。 如图由于事务A在事务B两次读取之间做了插入并提交导致事务B第一次读取到的数据和第二次读取到的数据数量不一致从而形成了不可重复读。 4. 丢失更新 两个事务同时读取一条记录。指两个事务同时读取同一行数据并且在稍后更新同一行数据时其中一个事务的更新操作覆盖了另一个事务的更新导致后一个事务的更新丢失从而造成数据不一致的情况。即后一个事务的更新覆盖了前一个事务的更新。 如图事务A先修改接着事务B也做修改在事务B修改过程中事务A先提交了然后事务B接着提交。最终事务B提交的数据覆盖了A的数据结果造成丢失更新。举个例子银行卡内余额100元A和B同时向银行卡转账100元A先转入、B后转入最终B得到余额1200元。 三、事务的隔离级别 1. 读未提交read uncommitted 读取尚未提交的数据不解决脏读、允许脏读即使其他事务未提交本事务也能看到修改后的数据值。安全性最差但性能最好。不使用 2. 读已提交read committed 读取已提交的数据可以解决脏读Oracle等多数数据库默认都是该级别。安全性较差性能较好。不重复读) 3. 可重复读repeatable read 重复读取可以解决脏读和不可重复读mysql默认的可重复读。无论其他事务是否修改并提交了数据在这个事务中看到的数据值始终不受其他事务影响。安全性较高性能较差。 4. 串行化serializable 可以解决脏读、不可重复读和虚读——相当于锁表完全串行化的读每次读都需要获得表级共享锁读写相互都会阻塞。安全性高性能差。不使用 串行化事务隔离级别就像是在数据库中排起了队每个人都要一个一个地走到柜台前办事。这种情况下每次只有一个人可以进行操作其他人需要等待。这样做可以确保每个人看到的信息都是最新的不会出现信息不一致的情况。但是办事效率会变得很低因为大家得排队等着办事不能同时进行。 注意mysql 默认的事务处理级别是 repeatable read 而 Oracle 和 SQL Server 是 read committed 。 四、事务隔离级别作用范围 通过控制事务隔离级别数据库管理系统可以灵活地调整事务之间的交互方式从而平衡数据的一致性和并发性能。不同的隔离级别在读取和写入数据时的影响范围不同其作用范围分为全局级和会话级。 1. 查询全局事务隔离级别 show global variables like %isolation%; select global.tx_isolation; 示例 mysql select global.tx_isolation; ----------------------- | global.tx_isolation | ----------------------- | REPEATABLE-READ | ----------------------- 2. 查询会话事务隔离级别 show session variables like %isolation%; select session.tx_isolation; select tx_isolation; 示例 mysql select tx_isolation; ----------------- | tx_isolation | ----------------- | REPEATABLE-READ | ----------------- 3. 设置全局事务隔离级别 set global transaction isolation level 隔离级别; 示例 mysql set global transaction isolation level read committed; # 修改全局会话级别 mysql select global.tx_isolation; # 查询全局事务隔离级别 ----------------------- | global.tx_isolation | ----------------------- | READ-COMMITTED | # 读已提交 -----------------------mysql select tx_isolation; # 查询当前会话事务隔离级别 ----------------- | tx_isolation | ----------------- | REPEATABLE-READ | # 可重复读 ----------------- # 注意设置全局隔离级别会影响新建立的会话的默认隔离级别但不会立即改变已经存在的会话的隔离级别 4. 设置会话事务隔离级别 set session transaction isolation level 隔离级别;五、事务控制语句 在MySQL中可以使用以下事务控制语句来管理事务的开始、提交、回滚等操作。 1. 控制语句 begin 或 start transaction # 显式地开启一个事务。 commit 或 commit work # 提交事务并使已对数据库进行的所有修改变为永久性的。 rollback 或 rollback work # 回滚会结束用户的事务并撤销正在进行的所有未提交的修改。 savepoint S1 # 使用 savepoint 允许在事务中创建一个回滚点一个事务中可以有多个 savepoint“S1”代表回滚点名称。 rollback to [savepoint] S1 # 把事务回滚到标记点。 2. 事务配置一般格式 use 库名; begin; 动作 表名 set 字段 表达式 select * from 表名 # 观察两个事务数据差异 commit; 3. 示例 准备表 mysql create database school; mysql use school; mysql create table class01 (id int(5) not null primary key,name varchar(40),money double); # money double的意思是在MySQL数据库表中创建一个名为money的列该列的数据类型为双精度浮点数用于存储货币金额或其他需要高精度的数值数据。 mysql insert into class01 values(1,zhangsan,1000); mysql insert into class01 values(2,lisi,1000); mysql select * from class01; --------------------- | id | name | money | --------------------- | 1 | zhangsan | 1000 | | 2 | lisi | 1000 | --------------------- 3.1 提交事务 ① 开启事务 mysql begin; mysql update class01 set money money - 100 where namezhangsan; 此时未提交事务另打开新的终端查看表信息对比结果 此时事务A如果退出修改的操作就被丢弃 。 ② 提交事务 提交事务后所有用户再次查询将看到最新的数据。  3.2 回滚事务 ① 更新数据 mysql begin; mysql update class01 set money money 100 where id2; mysql select * from class01; --------------------- | id | name | money | --------------------- | 1 | zhangsan | 900 | | 2 | lisi | 1100 | --------------------- ② 回滚事务 mysql rollback; mysql select * from class01; --------------------- | id | name | money | --------------------- | 1 | zhangsan | 900 | | 2 | lisi | 1000 | --------------------- 3.3 多点回滚 ① 更新数据设置回滚点 mysql begin; mysql update class01 set money money 100 where id1; mysql select * from class01; --------------------- | id | name | money | --------------------- | 1 | zhangsan | 1000 | | 2 | lisi | 1000 | --------------------- mysql savepoint S1; #设置回滚点S1mysql update class01 set money money 100 where id2; mysql select * from class01; --------------------- | id | name | money | --------------------- | 1 | zhangsan | 1000 | | 2 | lisi | 1100 | --------------------- mysql savepoint S2; #设置回滚点S2mysql insert into class01 values(3,wanger,2000); mysql select * from class01; --------------------- | id | name | money | --------------------- | 1 | zhangsan | 1000 | | 2 | lisi | 1100 | | 3 | wanger | 2000 | --------------------- ② 回滚S1 mysql rollback to S1; #回滚至S1 mysql select * from class01; --------------------- | id | name | money | --------------------- | 1 | zhangsan | 1000 | | 2 | lisi | 1000 | ---------------------3.4 使用 set 设置控制事务 set autocommit0; #禁止自动提交 set autocommit1; #开启自动提交mysql默认为1 show variables like autocommit; #查看Mysql中的autocommit值示例 mysql show variables like autocommit; ---------------------- | Variable_name | Value | ---------------------- | autocommit | ON | #默认开启自动提交 ---------------------- mysql set autocommit0; mysql show variables like autocommit; ---------------------- | Variable_name | Value | ---------------------- | autocommit | OFF | #已禁止自动提交 ----------------------
http://www.pierceye.com/news/324740/

相关文章:

  • 南宁手机建站公司新加坡网站后缀
  • 如何在建设部网站查询获奖情况如何申请电商网站
  • jsp网站访问万维网网站幻灯
  • 南通住房和城乡建设部网站首页安徽公司网站建设
  • 建筑论坛网站修改WordPress文章发布页面
  • 网站代备案系统seo优化服务是什么意思
  • 专门做选择题的网站一个网站seo做哪些工作
  • wordpress 多站点 拷贝中国建设银行春招网站
  • 门户营销型网站wordpress代码执行
  • 保山市建设厅网站做建筑机械网站那个网站好
  • 广告位网站建设国际人才网中山招聘网
  • 南昌市城市建设档案馆网站一个网站做无限关键词
  • wordpress特别卡 iis东莞推广优化公司
  • 做网站收入怎样开放平台登录
  • 外贸网站运营推广微信运营商
  • 国外做储物柜的网站做亚马逊网站一般发什么快递
  • 仿古建筑公司网站廊坊网站建设公司
  • 在线动画手机网站模板下载学软件开发需要什么基础
  • 北京的网站建设收费标准推广产品的方法和步骤
  • 北京市专业网站制作企业合肥做网络推广的公司
  • 网站建设php教程视频手机商城网站设计
  • 重庆网站建设公司哪个最好老家装设计网
  • 外贸网站建设产品crm公司
  • 网站做查赚钱网站建设捌金手指花总四
  • 有没有做链接的网站彩票型网站建设
  • 15年做哪个网站能致富网站界面设计的相关指南
  • 网站报价功能清单德州做网站最好的公司
  • 网站开发设计图片搭建论坛需要多少钱
  • 网站建设价格明细做一套二级域名网站怎么做
  • 网站建设 发展方向手机开发人员选项怎么打开