mysql事务编号_Mysql事务

一:mysql事务

1.需求

从orders表中查询最新的销售订单编号,并使用下一个销售订单编号作为新的销售订单编号。

在指定客户的orders表中插入新的销售订单。

将新的销售订单项目插入orderdetails表中。

从orders表和orderdetails中获取数据以确认更改。

如果由于数据库故障而导致上述一个或多个步骤失败,那么数据会发生什么? 如果将订单项添加到orderdetails表中的步骤失败,系统中将会有空的销售订单(只有订单号,不知道这个订单卖了什么)。

2.介绍

要启动事务,请使用START TRANSACTION语句。要撤消MySQL语句执行,请使用ROLLBACK语句。

请注意,有一些SQL语句,主要是数据定义语句,不能在事务中使用以下语句:

2fb807ab5a72e300be367cec2c9dd528.png

要将更改写入事务中的数据库,请使用COMMIT语句。要注意的是,默认情况下,MySQL自动提交对数据库的更改。

要强制MySQL不会自动提交更改,请使用以下语句:

e7c60c01fbda95a28617bf0ec143fd79.png

3.需求的步骤

使用START TRANSACTION语句启动事务。

从orders表中获取最新的销售订单编号,并使用下一个销售订单编号作为新的销售订单编号。

在指定orders表中插入新的销售订单。

将新的销售订单项目插入orderdetails表中。

使用COMMIT语句提交更改。

从orders表和orderdetails表中获取数据以确认更改。

4.sql

1 --start a new transaction

2 start transaction;3

4 --get latest order number

5 select @orderNumber := max(orderNUmber)6 fromorders;7 --set new order number

8 set @orderNumber = @orderNumber + 1;9

10 --insert a new order for customer 145

11 insert intoorders(orderNumber,12 orderDate,13 requiredDate,14 shippedDate,15 status,16 customerNumber)17 values(@orderNumber,18 now(),19 date_add(now(), INTERVAL 5 DAY),20 date_add(now(), INTERVAL 2 DAY),21 'In Process',22 145);23 --insert 2 order line items

24 insert intoorderdetails(orderNumber,25 productCode,26 quantityOrdered,27 priceEach,28 orderLineNumber)29 values(@orderNumber,'S18_1749', 30, '136', 1),30 (@orderNumber,'S18_2248', 50, '55.09', 2);31 --commit changes

32 commit;33

34 --get the new inserted order

35 select * fromorders a36 inner join orderdetails b on a.ordernumber =b.ordernumber37 where a.ordernumber = @ordernumber;

5.效果

d07edc9e6e60a05660f714f696ef8028.png

二:表锁定

1.介绍

使用MySQL锁来协调会话之间的表访问。

MySQL允许客户端会话明确获取表锁,以防止其他会话在特定时间段内访问表。客户端会话只能为自己获取或释放表锁。它不能获取或释放其他会话的表锁。

2.准备数据

2f0a7d7f01a89ed02e05d66e96123b55.png

3.lock与unlock语法

lock:

220471eab165959cb117587f300ccd1f.png

可将表的名称放在LOCK TABLES关键字后面,后跟一个锁类型。 MySQL提供两种锁类型:READ和WRITE。 我们将在下一节详细介绍这两种锁类型。

unlock:

da7cdd1f8b2ccb6d5fdd608799715817.png

这个是要释放表的锁。

4.read类型

功能:

同时可以通过多个会话获取表的READ锁。此外,其他会话可以从表中读取数据,而无需获取锁定。

持有READ锁的会话只能从表中读取数据,但不能写入。此外,其他会话在释放READ锁之前无法将数据写入表中。来自另一个会话的写操作将被放入等待状态,直到释放READ锁。

如果会话正常或异常终止,MySQL将会隐式释放所有锁。这也与WRITE锁相关。

示例:

A:获取connection_id

14cca747ac8e98d526ede7a2e46f0693.png

B:插入一行数据

INSERT INTO tbl(col) VALUES(10);

C:获取锁,并添加数据

LOCK TABLE tbl READ;

INSERT INTO tbl(col) VALUES(11);

会报错,因为这个时候不可以添加数据。

95748f4c0214df51aecd72e7526f2088.png

D:打开另一个会话,查看Id

3e1d1c2ae99e3107f2b51236cf5560c2.png

E:插入数据

86386e845bc0a80b11325406c62e153a.png

F:查看详细 信息

7d22651a4bdea3c7e860f1170cfaeb4b.png

G:返回第一个会话,释放read锁

1745a3a2c7a51f26facd7bbf00c93435.png

5.write类型

功能:

只有拥有表锁定的会话才能从表读取和写入数据。

在释放WRITE锁之前,其他会话不能从表中读写。

示例:

A:获取锁,并插入数据

2602c6d15f9ce44ba2e137cf173e71c1.png

这时,去其他会话进行查询数据:

不能读写。

3b81fb7bf21c62c16e80ca587f176c6f.png

B:回到会话一释放锁

UNLOCK TABLES;

C:进入会话二进行操作

这时可以进行读写操作,刚才被锁住的查询可以继续执行。

a044b7b742ed8e550339caf04c284c4f.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA入门级教学之(浮点型数据类型)

/* 关于浮点型数据类型: float 单精度 【4个字节】 double 双精度 【8个字节,精度较高,默认double】 double的精度太低【相对来说的】,不适合做财务软件 财务涉及到钱的问题,要求精度较高,所以SUN在基础SE类库当中 为…

java try catch 例子_java try catch

try catch机制非常好。那些觉得try catch不行的人,是他们自己的水平有问题,无法理解这种机制。并且这群人写代码不遵守规则,喜欢偷懒,这才造成try catch不好的错觉。详细解释:1.程序要健壮,必须要设计报错机…

JAVA入门级教学之(布尔型数据类型)

/* 关于布尔型数据类型: boolean 在java语言中boolean类型只有两个值:true、false,没有其它值 不像c语言中,0和1可以表示假和真 在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0,true底层是1…

java 自动生成文档_[原]java开发文档的自动生成方式

对于Java注释我们主要了解三种:// 注释一行/* ...... */ 注释若干行第三种,文档注释:/** ...... */ 注释若干行,并写入 javadoc 文档通常这种注释的多行写法如下:/*** .........* .........*/很多人多忽视了这第三种注…

JAVA入门级教学之(数据转换规则)

/* 关于基本数据之间的互相转换&#xff1a;转换规则 1、八种基本数据类型中**除布尔类型之外**剩下的7种类型之间都可以互相转换2、小容量向大容量转换&#xff0c;称为自动类型转换&#xff0c;容量从小到大排序如下&#xff1a;-byte<short<int<long <float<…

java程序员面试技术_java程序员面试应该具备的一些基本技能

这里列举一些Java程序员面试应该要具备的一些基本技能&#xff0c;仅当参考。1.基本语法包括static、final、transient等关键字的作用&#xff0c;foreach循环的原理等等。越简单的问题越能看出一个人的水平&#xff0c;别人对你技术的考量绝大多数都是以深度优先、广度次之为标…

JAVA入门级教学之(算数运算符)

/*3.运算符 *算数运算符 *关系运算符 *逻辑运算符 *字符串连接运算符 *三元运算符 *赋值类运算符 */ /* 关于java编程中运算符之&#xff1a;算数运算符 求和 - 相减 * 乘积 / 商 % 求余取模 自加1 -- 自减1 注意&#xff1a;一个表达式中如果有多个运算符&#xf…

web api教程Java_WebApi项目创建CURD

WebApi1.创建实体类public class Contact{public string Id { get; set; }public string Name { get; set; }public string Phone { get; set; }public string Email { get; set; }public DateTime LastModified { get; set; }}2.操作实体类接口public interface IContactRepos…

JAVA入门级教学之(关系运算符)

/* 关系运算符&#xff1a;比较的是两个变量保存的值的大小 大于 大于等于 < 小于 < 小于等于 等于 &#xff01; 不等于 是赋值运算符 是关系运算符 关系运算符的运行结果一定是布尔类型&#xff1a;true/false */ public class OperatorTest02 {public static v…

guid java_JAVA实现生成GUID的方法

JAVA实现生成GUID的方法GUID是一个128位长的数字&#xff0c;一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲&#xff0c;如果一台机器每秒产生10000000个GUID&#xff0c;则可以保证(概率意义上)3240年不重复。复制代码 代码…

JAVA入门级教学之(逻辑(布尔)运算符)

/*逻辑(布尔)运算符&#xff1a; & 逻辑与 (两边的算子都是true&#xff0c;结果才是true) | 逻辑或 (两边的算子只要有一个是true&#xff0c;结果就是true) ! 逻辑非 (取反) ^ 逻辑异或(两边的算子只要是不一样的&#xff0c;结果就是reue) && 短路与 ||…

JAVA入门级教学之(赋值运算符)

/* 赋值运算符 字符串连接运算符 三目运算符/三元运算符/条件运算符 关于JAVA中的赋值类运算符&#xff1a; 赋值类运算符包括两种&#xff1a; *基本的赋值运算符 *扩展的赋值运算符 - * / % 1.赋值类的运算符优先级&#xff1a;先执行等…

java xss 默认值_一台 Java 服务器可以跑多少个线程?

原标题&#xff1a;一台 Java 服务器可以跑多少个线程&#xff1f;转自&#xff1a;简书&#xff0c;作者&#xff1a;新栋BOOK一台Java服务器能跑多少个线程&#xff1f;这个问题来自一次线上报警如下图&#xff0c;超过了我们的配置阈值。京东自研UMP监控分析打出jstack文件&…

mysql引擎inndbmmyisam_Mysql中MyISAM引擎和InnoDB引擎的比较

结论如果不清楚自己应该用什么引擎&#xff0c;那么请选择InnoDB&#xff0c;Mysql5.5的版本默认引擎都是InnoDB&#xff0c;早期的Mysql版本默认的引擎是MyISAMMyISAM 和 InnoDB的适用场景MyISAM适合&#xff1a;(1)做很多count 的计算&#xff1b;(2)插入不频繁&#xff0c;查…

JAVA入门级教学之(连接运算符)

/*关于字符串的连接运算符 关于java中的""运算符&#xff1a; 1.加号运算符在java语言中有两个作用&#xff1a; *加法运算&#xff0c;求和 *字符串的连接运算 2.当""运算符两边的数据都是数字的话&#xff0c;一定是进行加法运算。 3.当"…

java android aes加密解密_AES加密解密在JAVA和ANDROID下互通

昨天外包安卓的那个人说AES的加解密结果不一样。于是百度搜索发现还真是!贴上AES加密核心&#xff1a;Cipher cipher Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);CBC是工作模式&#xff0c;AES一共同拥有电子passw…

JAVA入门级教学之(三元运算符)

/* 三元运算符/三目运算符/条件运算符 1.语法规则&#xff1a; 布尔表达式?表达式1:表达式2; true 执行表达式1 false 执行表达式2 */ public class OperatorTest06 {public void main(String[] args) { //编译错误 //10; //男;//布尔类型的变量 boolean sexf…

java 加密 数字_java 加密数字签名

1)消息摘要&#xff1a;这是一种与消息认证码结合使用以确保消息完整性的技术。 主要使用单向散列函数算法&#xff0c;可用于检验消息的完整性&#xff0c;和通过散列密码直接以文本形式保存等&#xff0c;目前广泛使用的算法有MD4、MD5、SHA- 1&#xff0c;jdk1.5对上面都提供…

JAVA入门级教学之(if语句)

/* 关于java语言中的if语句&#xff0c;属于选择结构 if语句又被称为分支语句/条件控制语句1.if语句的语法结构&#xff1a;四种编写方式 第一种&#xff1a;条件为真&#xff0c;执行大括号内容 条件为假&#xff0c;*跳出*大括号内容 if(布尔表达式){ java…

python怎么处理数据标注_在python中将数据标记为敏感

编辑我提出了一个使用ctypes(反过来使用c)将内存归零的解决方案。import sysimport ctypesdef zerome(string):location id(string) 20size sys.getsizeof(string) - 20memset ctypes.cdll.msvcrt.memset# For Linux, use the following. Change the 6 to whatever it is o…