MYSQL-使用事务保证数据完整性

devtools/2024/10/21 13:36:01/

什么是事务?

  •  事务(Transaction)是作为单个逻辑工作单元执行的一系列操作

  •  多个操作作为一个整体向系统提交,要么都执行,要么都不执行


事务的特性:

事务必须具备以下四种属性,简称ACID属性

1、原子性(Atomicity)

事务是一个完整的操作,事务的各步操作是不可分割的(原子的),要么都执行,要么都不执行。

2、一致性(Consistency)

当事务完成时,数据必须处于一致状态。

 3、隔离性(Isolation)

并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务。

4、 持久性(Durability)

事务完成后,它对数据库的修改被永久保持。


 

如何创建事务 

MySQL中支持事务的存储引擎有InnoDB和BDB。

开始事务 Begin;

提交事务 Commit;

回滚(撤回)事务 Rollback;


示例

DDL+DML

CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',`createDate` datetime DEFAULT NULL,`userName` varchar(20) DEFAULT NULL,`pwd` varchar(36) DEFAULT NULL,`phone` varchar(11) DEFAULT NULL,`age` tinyint(3) unsigned DEFAULT NULL,`sex` char(2) DEFAULT '男',`introduce` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `result` (`rid` int(11) NOT NULL AUTO_INCREMENT COMMENT '成绩编号',`testName` varchar(255) DEFAULT NULL COMMENT '测试名称',`score` double(4,2) DEFAULT NULL COMMENT '成绩',`studentId` int(11) DEFAULT NULL COMMENT '学生id',PRIMARY KEY (`rid`),KEY `studentId` (`studentId`),CONSTRAINT `result_ibfk_1` FOREIGN KEY (`studentId`) REFERENCES `student` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert into student values(0,'2024-02-25 10:10:10','赵灵儿','123',
'15612345678',16,'女','逍遥哥哥,你终于找到我了。');
insert into student values(0,'2024-02-25 10:10:10','王语嫣','123',
'15612345678',17,'女','慕容复,我和你不共戴天。');
insert into student values(0,'2024-02-25 10:10:10','龙姑娘','123',
'15612345678',22,'女','我想过过过儿过过的日子。');
insert into student values(0,'2024-02-25 10:10:10','杨过','123',
'15612345678',18,'男','一遇杨过误终身。');
insert into student values(0,'2024-02-25 10:10:10','杨逍','123',
'15612345678',27,'男','杨过跟程英的大儿子。');
insert into student (userName,age,introduce)values('黄衣女子',26,'杨过与龙姑娘的大女儿。');insert into result values(0,'政治',96,1);
insert into result values(0,'地理',86,5);
insert into result values(0,'政治',77,3);
insert into result values(0,'英语',99,3);
insert into result values(0,'历史',22,6);
insert into result values(0,'化学',69,2);
insert into result values(0,'Java',79,5);
insert into result values(0,'Java',67,6);
insert into result values(0,'政治',97,2);
insert into result values(0,'物理',76,6);
insert into result values(0,'物理',82,2);
insert into result values(0,'化学',56,4);

DQL语句 

update student set userName='流氓+渣男' where id=5;
begin; #开启事务
update student set userName='流氓and渣男' where id=5;
select * from student where id=5;
update student set userName='独臂大傻雕渣男' where id=4;
select * from student where id=4;
rollback; #通过undo log来完成还原操作的。
commit; #提交数据到硬盘,通过redo log完成的


http://www.ppmy.cn/devtools/36635.html

相关文章

通过mask得到bbox(numpy实现)

在SAM的加持下,我们很容易得到物体的mask,但是物体的bbox信息通常也很有用。那么,我们可以写一个函数,立马可以通过mask得到bbox。 代码如下: import numpy as npdef mask2bbox(mask):nonzero_indices np.nonzero(m…

基于Springboot+Vue的Java项目-旅游网站系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

学习云计算亚马逊云科技AWS的6大教科书神级别免费网站

亚马逊☁️(AWS)是全球云行业最🔥火云平台,云行业的就业机会和市场前景都非常巨大,现在通过学AWS去转云会是个千载难逢的好机会。小李哥这次来盘点学习AWS的6大教科书级免费官方网站(免费课程+动手实验)。欢迎大家点击图片左下角加…

XORM 框架的使用

1、xorm 1.1、xorm 简介 xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 特性 支持 struct 和数据库表之间的灵活映射,并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit,…

【刷题篇】双指针(一)

文章目录 1、移动零2、复写零3、快乐数4、盛最多水的容器 1、移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 class Solution { pub…

【kalre 日常】MybatisPlus组件自动代码生成脚本

引用 <!-- mybatis-plus依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.2</version></dependency><!-- mybatis-plus代码生成 --><dep…

Gradle 进阶学习 之 build.gradle 文件

build.gradle 是什么&#xff1f; 想象一下&#xff0c;你有一个大型的乐高项目&#xff0c;你需要一个清单来列出所有的乐高积木和它们如何组合在一起。在软件开发中&#xff0c;build.gradle 就是这个清单&#xff0c;它告诉计算机如何构建&#xff08;组合&#xff09;你的软…

EtherCAT开发_4_分布时钟知识点摘抄笔记1

分布时钟 (DC&#xff0c;Distributed Cl ock) 可以使所有EtherCAT设备使用相同的系统时间&#xff0c;从而控制各设备任务的同步执行。从站设备可以根据同步的系统时间产生同步信号&#xff0c;用于中断控制或触发数字量输入输出。支持分布式时钟的从站称为 DC 从站。分布时钟…