首页 > 数据库 >Java登陆第七天——SQL之事务

Java登陆第七天——SQL之事务

时间:2023-11-15 18:02:00浏览次数:34  
标签:语句 事务 Java 记录 money 回滚 SQL 第七天

事务

在日常生活中,事务就是一件件要做的事情。

在数据库中,事务指的是一条条SQL语句。

事务的功能

事务用于保证数据的一致性,它由一组DML语句组成。

该组DML语句要么全部成功,要么全部失败。

image
事务就是为了解决上述问题。

事务的解释

image
如果直接回到记录点A。A后的记录点都会被删除。

当执行事务操作时,mysql会在表上加锁,防止其他会话(用户)更改表的数据。
会话:实际开发中,数据库会有多个用户进行连接。一个用户称为一个会话。

事务操作

--开始一个事务。
start transaction;

--设置记录点。
savepoint 记录点名;

--回滚到一个记录点。
rollback to 记录点名;

--回滚全部事务。(也就是回到事务开始之时)
rollback;

--提交事务。(所有操作生效,无法进行回滚操作)
commit;

栗子:新建一个表money,并开始一个事务
设置记录点A
插入数据(1001,'张三',2000)
插入数据(1002,'李四',2000)
设置记录点B
张三给李四转账1000
设置记录点C
查看表money

SQL语句:

create table money (
id int primary key,
name varchar(32),
balance int
);

start transaction;
savepoint A;

insert into money values (1001,'张三',2000);
insert into money values (1002,'李四',2000);
savepoint B;

update money set balance = balance - 1000 where id = 1001;
update money set balance = balance + 1000 where id = 1002;

savepoint C;

select * from money;

程序运行结果:
image
注意此时事务没有提交。数据并没有生效

在上述栗子的基础上:
张三和李四吵架了,又不想转账了(回滚到记录点B)
再查看money表

SQL语句:

rollback to B;

select * from money;

程序运行结果:
image

倒闭了,张三李四都不想玩了。(回滚全部事务)
再查看money表

SQL语句:

rollback;

select * from money;

程序运行结果:
image

测试能否从最初回到记录点B

SQL语句:

rollback to B;

程序运行结果:
image
回滚到事务开始之时,B记录点已被删除。

提交事务,让money表空着去吧
再查看money表

SQL语句:

commit;

select * from money;

程序运行结果:
image

标签:语句,事务,Java,记录,money,回滚,SQL,第七天
From: https://www.cnblogs.com/Ocraft/p/17834420.html

相关文章

  • java: 程序包xxx.xxx.xxx不存在
    1.问题在拷贝进来一个文件夹/文件进入项目后,发生报错:java:程序包com.itheima.mp.domain.query不存在2.解决这里主要是由于我们的文件直接拷贝进来,导致编译的时候无法找到。点开右侧的Maven管理栏,在生命周期一栏选择clean(执行"MavenClean"会删除target目录,其中包含先前构建......
  • mysql 人大金仓 按照日 周 月 年 分组查询
    查询每天的数据myslq:SELECTCOUNT(1)AStotal,DATE_FORMAT(created_time,'%Y-%m-%d')ASdaysFROMtable_testGROUPBYdays;金仓:SELECTCOUNT(1)AStotal,to_char(created_time,'%Y-%m-%d')ASdaysFROMtable_testGROUPBYdays;查询每周的数据mys......
  • SQLSERVER 2016新建订阅,连接发布服务器时报错“设置连接字符串后无法更改或读取属性 P
    被此问题困扰许久,查遍全网也没有查到合适的解决方案。特此记录,希望帮到需要的人。SQLSERVER2016新建订阅,连接发布服务器时报错“设置连接字符串后无法更改或读取属性Password。(Microsoft.SqlServer.ConnectionInfo)”===================================设置连接字符串......
  • 软件测试|MySQL HAVING分组筛选详解
    简介在MySQL数据库中,HAVING子句用于在使用GROUPBY子句对结果进行分组后,对分组后的数据进行筛选和过滤。它允许我们对分组后的结果应用聚合函数,并基于聚合函数的结果进行条件过滤,从而得到我们需要的最终结果集。本文将详细介绍HAVING子句的用法,并提供一些实际示例以帮助大......
  • 【你不知道的JavaScript】this关键字
    没有this时,需要传入上下文获取name,在多个上下文时,代码变得繁杂重复varme={name:"Kyle"};varyou={name:"Reader"};functionidentify(context){returncontext.name.toUpperCase();}functionspeak(context){vargreeting="Hello,I&......
  • 软件测试|MySQL中的GROUP BY分组查询,你会了吗?
    MySQL中的GROUPBY分组查询:详解与示例在MySQL数据库中,GROUPBY语句用于将数据按照指定的列进行分组,并对每个分组执行聚合函数操作。这就是的我们可以在查询中汇总数据并生成有意义的结果。本文将深入介绍MySQL中的GROUPBY语句,并提供示例来说明其用法。基本语法在MySQL中,GRO......
  • Java——IO流
    一、异常概述:就是Java程序在运行的过程中出现的错误由来:问题也是现实生活中的一个具体事务,也可以通过java的类的形式进行描述,并封装成对象。其实就是Java对不正常情况进行描述后的对象体现Throwable:Error:表示很严重的问题,一般情况下不解决Exception:......
  • Java编程:删除 List 元素的三种正确方法
    删除List中的元素会产生两个问题:删除元素后List的元素数量会发生变化;对List进行删除操作可能会产生并发问题;我们通过代码示例演示正确的删除逻辑packagecom.ips.list;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importjava.util.c......
  • Java开门方法怎么调用关锁方法
    在Java中,如果你想要调用一个方法来锁定门(假设是一个类的方法),你首先需要有一个表示门的类,并且这个类中应该包含开门和关门的方法。这里是一个简单的例子:publicclassDoor{ //开门的方法publicvoidopen(){System.out.println("Doorisopened.");} //关门的方法pu......
  • javascript promise all实现图片顺序加载
    不使用promise时是异步加载,图片加载的顺序不固定<!doctypehtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,user-scalable=no,initial-scale=1......