MariaDB SQL 管理事物处理

表单


  1. customers表:客户。
  2. orders表:客户的订单。
  3. orderitems:存储订单订购的各种物品。

情景(没有使用事务)


  1. 检查客户是否在数据库(即在customers表中)。如果没有,添加该客户。
  2. 检索客户id。
  3. 添加一行到orders表中。将它关联到客户ID。
  4. 检索orders表中新订单的ID。
  5. 对每个订购的物品,添加一行到orderitems表中,通过检索到的ID将其关联到orders表。

问题



假设产生了一些数据库故障或者其他原因导致数据库故障,让这个完整的步骤无法完成。

故障发生在:

  1. 客户添加之后,并且在表单添加之前。这样的情况是允许出现的,因为客户没有订单是合法的。
  2. orders行添加之后,且在添加orderitems行之前。数据库将有一个空的订单。
  3. 添加orderitems行的时候。数据库将产生一个不完整的订单。

什么是数据库事务?


  1. 数据库事务:一个有限的数据库操作序列构成。(维基百科)
  2. 事务(Transaction)——一组SQL语句。(《MariaDB SQL》)
  3. 事务处理(Transaction processing):管理数据库操作集合的一种机制,它保证批处理完成,以保证数据库永远不会包含部分操作的结果,即要么全部都执行,要么完全不执行。(《MariaDB SQL》)

如何处理?(使用事务)


  1. 检查客户是否在数据库中。如果没有,添加该客户。
  2. 提交客户信息。
  3. 检索客户ID。
  4. 添加一行到orders表中。
  5. 如果添加行到orders表时发生故障,则回滚(roll back)。
  6. 检索orders表中新订单的ID。
  7. 对每个订购的物品,添加一行到orderitems表中。
  8. 如果在添加行到orderitems时发生错误,回滚所有已添加的ordertimes行和orders行。
  9. 提交订单信息

其他概念


  • 回滚(Rollback):撤销指定SQL语句的处理过程。
  • 提交(Commit):将还未保存的数据库语句写入数据库表。
  • 保存点(Savepoint):事务集中的一个临时占位符,可进行回滚。

部分代码:

SELECT * FROM ordertotals;
START TRANSACTION;
DELETE FROM ordertotales;
SELECT * FROM ordertotales;
ROLLBACK;
SELECT * FROM ordertotals;
SAVEPOINT delete1;
ROLLBACK TO delete1;

设置MariaDB不能自动提交:

SET autocommit=0;

待续的更主要的主题



1.数据库最重要的核心是什么?

2.数据库完整性

3.数据库事务拥有四个特性,习惯上被称之为ACID特性

4.什么是死锁?乐观锁?悲观锁?

时间: 2024-11-18 16:50:10

MariaDB SQL 管理事物处理的相关文章

SQL Server事物的存储过程

在酒店管理系统开发中,我们会创建房间表和房间类型表(房型表)这两个表,如下图所示: 房型表:RoomType 房间表:Room 首先这两个表的关系:Room是从表,RoomType是主表,两表有主外键关系,RoomType.rTypeId=Room.rTypeId 分析这两个表,我们会发现这样一个问题:在房间表和房型表管理中,当我们修改或者删除一个RoomType表,对应的Room表我们也要做修改和删除,那么我们怎么解决这个问题呢?首先可以在数据库中设置级联删除,或者利用触发器也可以解决...这

CentOS7下mariadb日常管理

在CentOS7下,官方提供的mysql的rpm包就是mariadb,可查看mariadb包信息 [[email protected] ~]$rpm -qi mariadb # 需要先安装该包 Name : mariadb # 名称 Epoch : 1 Version : 5.5.52 # 版本 Release : 1.el7 # 发行版 Architecture: x86_64 # 支持安装的CPU架构 Install Date: Mon 24 Apr 2017 08:44:48 AM CST

MariaDB SQL 插入数据

插入单独的完整行,插入单独的部分行 INSERT INTO Custormers VALUES(NULL, 'Pep E. Lapew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL); ……以上SQL语句极度依赖列在表中定义的次序.它也依赖插入信息的次序.即使可以,也无法保证下一次表重构后,列仍保持完全相同的次序.…… INSERT INTO customers(cust_name, cust_addre

sql中事物

:事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性.(2):事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束.COMMIT表示提交,即提交事务的所有操作.具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束.ROLLBACK表示回滚,即在事务运行的过程中发生了

32. SQL -- 管理数据库和数据库表(1)

数据库和数据表 数据表的基本表是数据块,同储数据和操作数据的组成的. 表的列名在同一个表中具有惟一性,同一列的数据属于同一类型. 定NULL NOT NULL IDENTITY 数据表被分临时数据表两临时表又分临时表和全局. :结构 类型包括种,分字符串数据Unicode 类型和二类型.别进行介1)Unicode 3 类型:,和 : 关于在何char ncharSQL 则. 项的大小一致,char● 如果列数据则使用 . 项大小相差很大,而且大小可能超字请使用 . .字符串包括种具体数据Ncha

33. SQL -- 管理数据库和数据库表(2)

  修改数据库 在数据库中添加或删除文件和文件组.也可用于更改文件和文件组的属性,例如更改文件的名称和大小.ALTER DATABASE 提供了更改数据库名称.文件组名称以及数据文件和日志文件的逻辑名称的能力. 语法: ALTER DATABASE database { ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ] | ADD LOG FILE < filespec > [ ,...n ] | REM

Sql Server事物、索引、视图

事务概念: 事务是一种机制,它包含了一组数据库操作命令,而且将所有的命令作为一个整体向数据库提交或撤销. 这组命令要么执行,要么都不执行,所以事务是一个不可分割的逻辑工作单元. 事务的特点: 1.原子性:事务作为一个完整性的操作,其各元素是不可分割的,要么全部执行,要么撤销所有的操作,事务的单元不可能出现部分成功的情况. 2.一致性:事务完成前后,数据必须保持完全一致的状态.即在事务开始或完成后,数据库中存储的数据都必须保持一致的状态. 3.隔离性:事务是相对独立的,在一个事务对数据进行修改时,

MariaDB SQL INNER JOIN

基本理念 关系表和关系型数据库设计的基本理念. 接下来的内容并未覆盖以上所有主题,但足够让你进入后面的学习. 假设你有一个包含产品类别的数据库表,每行包含一个类别项.各个类别可以存储的信息包括产品介绍和价格,以及生产产品的公司的供应商信息. 由同一个供应商提供的许多不同类别的产品,应该把供应商的信息存储在哪里?因为如下理由,你不会把供应商信息和产品信息存储在一起. 因为对于每个产品,供应商的信息是相同的,对每个产品重复同样的信息是在浪费时间和存储空间. 如果供应商的信息改变,你不得不更新每一个存

sql server不用安装sql管理工具开启sa

今天无意间发现腾讯云镜像有windows server2016,追求新系统的我,马上就重装了云服务器.重装完后发现,配置太低,远程桌面都变得不是很顺畅,于是装完sql server2016后便不打算另外装管理工具了.网上查了资料,可以用cmd操作sql server,这样就可以直接在本地机子管理服务器了,也可以为服务器节省空间.废话不多说,接下来介绍操作方法.       管理sql server使用的是sqlcmd,sqlcmd 实用工具是一个命令行实用工具,用于 Transact-SQL 语