iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL事务的介绍以及示例分析
  • 757
分享到

MySQL事务的介绍以及示例分析

2024-04-02 19:04:59 757人浏览 独家记忆
摘要

这篇文章给大家介绍Mysql事务的介绍以及示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为

这篇文章给大家介绍Mysql事务的介绍以及示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行。 2.事务的语句 开始事物:BEGIN TRANSACTioN 提交事物:COMMIT TRANSACTION 回滚事务:ROLLBACK TRANSACTION 3.事务的4个属性 ①原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,事务的个元素是不可分的,事务是一个完整操作。 ②一致性(Consistemcy):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损。 ③隔离性(Isolation):对数据进行修改的多个事务是彼此隔离的。这表明事务必须是独立的,不应该以任何方式以来于或影响其他事务。 ④持久性(Durability):事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库 4.事务的保存点 SAVE TRANSACTION 保存点名称 --自定义保存点的名称和位置 ROLLBACK TRANSACTION 保存点名称 --回滚到自定义的保存点 -------------------实------------------例---------------------------- BEGIN TRANSACTION--开始事务 DECLARE @errorSun INT --定义错误计数器 SET @errorSun=0 --没错为0 UPDATE a SET id=232 WHERE a=1 --事务操作sql语句 SET @errorSun=@errorSun+@@ERROR --累计是否有错 UPDATE aa SET id=2 WHERE a=1 --事务操作SQL语句 SET @errorSun=@errorSun+@@ERROR --累计是否有错 IF @errorSun<>0 BEGIN PRINT '有错误,回滚' ROLLBACK TRANSACTION--事务回滚语句 END ELSE BEGIN PRINT '成功,提交' COMMIT TRANSACTION--事务提交语句 END 示例:创建一个存储过程,向两个表中同时插入数据复制代码 代码如下: Create proc ReGISterUser (@usrName varchar(30), @usrPasswd varchar(30),@age int,@sex varchar(10), @PhoneNum varchar(20), @Address varchar(50) ) as begin begin tran insert into userinfo(userName,userPasswd) values(@usrName,@usrPasswd) if @@error<>0 begin rollback tran return -1 end insert into userdoc(userName,age,sex,PhoneNumber,Address)values(@Usrname,@age,@sex,@PhoneNum,@Address) if @@error<>0 begin rollback tran return -1 end commit tran return 0 end

事务的分类 按事务的启动与执行方式,可以将事务分为3类: 显示事务 也称之为用户定义或用户指定的事务,即可以显式地定义启动和结束的事务。分布式事务属于显示事务 自动提交事务 默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。 隐性事务 当连接以此模式进行操作时,sql将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。它生成连续的事务链。 一、显示事务 通过begin transacton、commit transaction、commit work、rollback transaction或rollback work等语句完成。 1、启动事务 格式:begin tran 事务名或变量 with mark 描述 2、结束事务 格式:commit tran 事务名或变量 (事务名与begin tran中的事务名一致 或commit work 但此没有参数 3、回滚事务 rollback tran 事务名或变量 | savepoint_name | savepoint_variable 或rollback work 说明:清除自事务的起点或到某个保存点所做的所有数据修改 4、在事务内设置保存点 格式:save tran savepoint_name | savepoint_variable 示例:复制代码 代码如下: use bookdb Go begin tran mytran insert into book values(9,"windows2000',1,22,'出版社') save tran mysave delete book where book_id=9 rollback tran mysave commit tran go select * from book go

可以知道,上面的语句执行后,在book中插入了一笔记录,而并没有删除。因为使用rollback tran mysave 语句将操作回滚到了删除前的保存点处。 5、标记事务 格式:with mark 例:使用数据库标记将日志恢复到预定义时间点的语句 在事务日志中置入一个标记。请注意,被标记的事务至少须提交一个更新,以标记该日志。 BEGIN TRAN MyMark WITH MARK UPDATE pubs.dbo.LastLogMark SET MarkTime = GETDATE() COMMIT TRAN MyMark 按照您常用的方法备份事务日志。 BACKUP LOG pubs TO DISK='C:\Backups\Fullbackup.bak' WITH INIT 现在您可以将数据库恢复至日志标记点。首先恢复数据库,并使其为接受日志恢复做好准备。 RESTORE DATABASE pubs FROM DISK=N'C:\Backups\Fullbackup.bak' WITH NORECOVERY 现在将日志恢复至包含该标记的时间点,并使其可供使用。请注意,STOPAT在数据库正在执行大容量日志时禁止执行。 RESTORE LOG pubs FROM DISK=N'C:\Backups\Logbackup.bak' WITH RECOVERY, STOPAT='02/11/2002 17:35:00' 5、不能用于事务的操作 创建数据库 create database 修改数据库 alter database 删除数据库 drop database 恢复数据库 restore database 加载数据库 load database 备份日志文件 backup log 恢复日志文件 restore log 更新统计数据 update statitics 授权操作 grant 复制事务日志 dump tran 磁盘初始化 disk init 更新使用sp_configure后的系统配置 reconfigure 二、自动提交事务 sql连接在begin tran 语句启动显式事务,或隐性事务模式设置为打开之前,将以自动提交模式进行操作。当提交或回滚显式事务,或者关闭隐性事务模式时,将返回到自动提交模式。 示例: 由于编译错误,使得三个insert都没执行复制代码 代码如下: use test go create table testback(cola int primary key ,colb char(3)) go insert into testback values(1,'aaa') insert into testback values(2,'bbb') insert into testback value(3,'ccc') go select * from testback go

没有任何结果返回 三、隐式事务 通过 api 函数或 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开。下一个语句自动启动一个新事务。当该事务完成时,再下一个 Transact-SQL 语句又将启动一个新事务。 当有大量的DDL 和DML命令执行时会自动开始,并一直保持到用户明确提交为止,切换隐式事务可以用SET IMPLICIT_TRANSACTIONS 为连接设置隐性事务模式.当设置为 ON 时,SET IMPLICIT_TRANSACTIONS 将连接设置为隐性事务模式。当设置为 OFF 时,则使连接返回到自动提交事务模式 语句包括: alter table insert open create delete revoke drop select fetch truncate table grant update 示例: 下面使用显式与隐式事务。它使用@@tracount函数演示打开的事务与关闭的事务:复制代码 代码如下: use test go set nocount on create table t1(a int) go insert into t1 values(1) go print '使用显式事务' begin tran insert into t1 values(2) print '事务外的事务数目:'+cast(@@trancount as char(5)) commint tran print '事务外的事务数目:'+cast(@@trancount as char(5)) go print go set implicit_transactions on go print '使用隐式事务' go insert into t1 values*4) print'事务内的事务数目:'+cast(@@trancount as char(5)) commint tran print'事务外的事务数目:'+cast(@@trancount as char(5)) go

执行结果: 使用显示事务 事务内的事务数目:2 事务外的事务数目:1 使用隐式事务 事务内的事务数目:1 事务外的事务数目:0 四、分布式事务 跨越两个或多个数据库的单个SQL Server中的事务就是分布式事务。 与本地事务区别:必须由事务管理器管理,以尽量避免出现因网络故障而导致一个事务由某些资源管理器成功提交,但由另一些资源管理器回滚的情况。 sql server 可以由DTc microsoft distributed transaction coordinator 来支持处理分布式事务,可以使用 BEgin distributed transaction 命令启动一个分布式事务处理 分二阶段: A 准备阶段 B 提交阶段 执行教程: 1、sql 脚本或应用程序连接执行启动分布式事务的sql语句 2、执行该语句的sql在为事务中的主控服务器 3、脚本或应用程序对链接的服务器执行分布式查询,或对远程服务器执行远程存储过程。 4、当执行了分布式查询或远程过程调用后,主控服务器将自动调用msdtc以便登记分布式事务中链接的服务器和远程服务器 5、当脚本或应用程序发出commit或rollback语句时,主控sql将调用msdtc管理两阶段提交过程,或者通知链接的服务器和远程服务器回滚其事务。 

mysql 事务的一个例子

复制代码 代码如下: begin tran declare @rownum1 int --未添加订单的空房数 declare @rownum2 int --添加订单的空房数目 declare @BookID1 int set @BookID1=0 insert into T_BookRoomInfo(RoomID,CustomerName,CustomerCardID,Discount, EnterTime,DepositMoney,Memo,UserID,UpdTime) values (@RoomID,@CustomerName,@CustomerCardID,@Discount, getdate(),@DepositMoney,@Memo,@UserID,getdate()) select @BookID1=@@IDENTITY if(@BookID1<>0) begin select @rownum1=count(1) from T_Room where IsEmploy=0 update T_Room set IsEmploy=1 where RoomID=@RoomID select @rownum1=count(1) from T_Room where IsEmploy=0

if(@rownum1<=@rownum2) begin  rollback tran end else begin  commit tran  end end else begin  rollback tran  end

关于mysql事务的介绍以及示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL事务的介绍以及示例分析

本文链接: https://www.lsjlt.com/news/61695.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle怎么查询当前用户所有的表
    要查询当前用户拥有的所有表,可以使用以下 sql 命令:select * from user_tables; 如何查询当前用户拥有的所有表 要查询当前用户拥有的所有表,可以使...
    99+
    2024-05-14
    oracle
  • oracle怎么备份表中数据
    oracle 表数据备份的方法包括:导出数据 (exp):将表数据导出到外部文件。导入数据 (imp):将导出文件中的数据导入表中。用户管理的备份 (umr):允许用户控制备份和恢复过程...
    99+
    2024-05-14
    oracle
  • oracle怎么做到数据实时备份
    oracle 实时备份通过持续保持数据库和事务日志的副本来实现数据保护,提供快速恢复。实现机制主要包括归档重做日志和 asm 卷管理系统。它最小化数据丢失、加快恢复时间、消除手动备份任务...
    99+
    2024-05-14
    oracle 数据丢失
  • oracle怎么查询所有的表空间
    要查询 oracle 中的所有表空间,可以使用 sql 语句 "select tablespace_name from dba_tablespaces",其中 dba_tabl...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限设置
    答案:要创建 oracle 新用户,请执行以下步骤:以具有 create user 权限的用户身份登录;在 sql*plus 窗口中输入 create user identified ...
    99+
    2024-05-14
    oracle
  • oracle怎么建立新用户
    在 oracle 数据库中创建用户的方法:使用 sql*plus 连接数据库;使用 create user 语法创建新用户;根据用户需要授予权限;注销并重新登录以使更改生效。 如何在 ...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限密码
    本教程详细介绍了如何使用 oracle 创建一个新用户并授予其权限:创建新用户并设置密码。授予对特定表的读写权限。授予创建序列的权限。根据需要授予其他权限。 如何使用 Oracle 创...
    99+
    2024-05-14
    oracle
  • oracle怎么查询时间段内的数据记录表
    在 oracle 数据库中查询指定时间段内的数据记录表,可以使用 between 操作符,用于比较日期或时间的范围。语法:select * from table_name wh...
    99+
    2024-05-14
    oracle
  • oracle怎么查看表的分区
    问题:如何查看 oracle 表的分区?步骤:查询数据字典视图 all_tab_partitions,指定表名。结果显示分区名称、上边界值和下边界值。 如何查看 Oracle 表的分区...
    99+
    2024-05-14
    oracle
  • oracle怎么导入dump文件
    要导入 dump 文件,请先停止 oracle 服务,然后使用 impdp 命令。步骤包括:停止 oracle 数据库服务。导航到 oracle 数据泵工具目录。使用 impdp 命令导...
    99+
    2024-05-14
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作