• 事务时需要在同一处理单元中执行的一系列更新处理的集合。通过使用事务,可以对数据库中的数据更新处理的提交和取消进行管理。
  • 事务处理的终止指令包括COMMIT(提交处理)和ROLLBACK(取消处理)两种。
  • DBMS的事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四种特性,统称为ACID特性。

举个例子,比如你在一个销售部门工作,这个时候领导分配给你一个工作:

“zifeiy,我们决定把运动T恤的销售单价下调100元,同时把T恤衫的销售单价上浮100元,麻烦你去更新一下数据库。”

那么其实这么一个任务中时包含两个步骤的:

  1. 将运动T恤的销售单价降低100元:
UPDATE Product
SET sale_price = sale_price - 100
WHERE product_name = '运动T恤';
  1. 将T恤衫的销售单价上浮100元:
UPDATE Product
SET sale_price = sale_price + 100
WHERE product_name = 'T恤衫';

上述连个操作要作为同一个处理单元执行。

也就是说:“要么都执行,要么都不执行。”

遇到这种需要在同一个处理单元中执行一系列更新操作的情况,一定要使用事务来进行处理。

创建事务

如果想在DBMS中创建事务,可以按照如下语法结构编写SQL语句:

事务开始语句;

DML语句1;
DML语句2;
DML语句3;
…… 事务结束语句(COMMIT或者ROLLBACK);

使用事务开始语句和事务结束语句,将一系列DML语句(INSERT/UPDATE/DELETE语句)括起来,就实现了一个事务处理。

事务的开始语句在不同的DBMS中有区别:

  • SQL Server、PostgreSQL:BEGIN TRANSACTION
  • MySQL:START TRANSACTION
  • Oracle、DB2: 无

在PostgreSQL中更新商品信息的事务:

BEGIN TRANSACTION;

    -- 将运动T恤的销售单价降低100元
UPDATE Product
SET sale_price = sale_price - 100
WHERE product_name = '运动T恤';
-- 将T恤衫的销售单价上浮100元
UPDATE Product
SET sale_price = sale_price + 100
WHERE product_name = 'T恤衫'; COMMIT;
  • COMMIT:提交处理

    • COMMIT的流程 = 直线进行
  • ROLLBACK:取消处理
    • ROLLBACK的流程 = 掉头回到起点

事务回滚的例子:

BEGIN TRANSACTION;

    -- 将运动T恤的销售单价降低100元
UPDATE Product
SET sale_price = sale_price - 100
WHERE product_name = '运动T恤';
-- 将T恤衫的销售单价上浮100元
UPDATE Product
SET sale_price = sale_price + 100
WHERE product_name = 'T恤衫'; ROLLBACK;

上述事务处理执行之后,表中的数据不会发生任何改变。这是因为执行最后一行的ROLLBACK之后,所有的处理都被取消了。因此,回滚执行起来就无需像提交时那样小心翼翼了(即使是想要提交的情况,也只需要重新执行事务就可以了)。

PostgreSQL学习笔记——事务的更多相关文章

  1. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  2. Postgresql学习笔记

    一:数据类型 主要有三大类以及其他一些杂项类型: 数值型.字符型.日期型. 数值型: 名称 描述 存储大小 范围 smallint 存储整数,小范围 2字节 -32768 至 +32767 integ ...

  3. postgresql学习笔记--基础篇 - copy

    1. psql 导入/导出数据 psql支持文件数据导入到数据库,也支持数据库表数据导出到文件中. COPY命令和\copy 命令都支持这两类操作,但两者有如下区别: COPY 命令是SQL命令,\c ...

  4. postgresql学习笔记--基础篇 -psql工具

    --创建用户 CREATE ROLE pguser WITH ENCRYPTED PASSWORD 'pguser'; --创建表空间目录 mkdir -p /database/pg10/pg_tbs ...

  5. postgresql学习笔记--基础篇

    1. 客户端程序和服务器端程序 1.1 客户端程序 Command Example Describe clusterdb clusterdb -h pghost1 -p 1921 -d mydb Cl ...

  6. PostgreSQL学习笔记——摘要

    因为PostgreSQL和MySQL.DB2等数据库均遵循SQL语法,所以这篇随笔仅记录一些PostgreSQL中和别的数据库有差别或之前学习中遗漏的地方,以及一些我觉得比较重点的地方. 通过psql ...

  7. PostgreSQL学习笔记(二)-安装pgAdmin

    继上篇安装PostgreSQL后,我们需要安装一个PostgreSQL的图形化管理工具. pgadmin管理工具 创建Python的虚拟环境 cd /root/venv python -m venv ...

  8. PostgreSQL学习笔记(一)-安装PostgreSQL

    PostgreSQL官网:https://www.postgresql.org/docs/11/index.html1.如何安装2.如何修改配置文件3.如何设置自动启动4.如何修改数据用户密码 本文环 ...

  9. jsp+postgresql学习笔记(1)用户登录与注册

    前期准备: tomcat的安装与配置(略) jdk的安装与配置(略) eclipse软件安装与配置(略) webstrom软件或IDEA的安装与配置(大概用了IDEA就不需要eclipse了,但是怎么 ...

随机推荐

  1. VUE this.$http.post 与后端flask 数据交互

    背景: 小鱼第一次前端用的VUE,然后前后端的交互调了几次,记录下来留给自己下次使用 前端 通过  form.XXX 获取数据,代码: <template> <el-form ref ...

  2. Python 使用装饰器装饰类

    1.装饰器装饰函数 了解过或学过装饰器的同学都知道,Python 中的装饰器是可以装饰函数的,如: # 定义一个装饰器 def decorator(func): def inner(*args,**k ...

  3. struts2--CRUD

    struts的CRUD 1.导入相关的pom依赖(struts.自定义标签库的依赖) <dependency> <groupId>jstl</groupId> &l ...

  4. 入门指引之查看accesstoken

    1. 测试工具查看 https://mp.weixin.qq.com/debug/ 2. 代码获取: # -*- coding: utf-8 -*- # filename: basic.py impo ...

  5. mysql删除完全重复数据保留一条

    CREATE TABLE tmp AS (SELECT DISTINCT * FROM oa_organization);--将不重复的数据存入新建临时表tmp DELETE FROM oa_orga ...

  6. 使用webuploader实现大文件传输

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  7. link cut tree 洞穴勘测

    /*[bzoj2049][Sdoi2008]Cave 洞穴勘测 2014年7月30日1,06923Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区 . ...

  8. LibreOJ #6165. 一道水题

    二次联通门 : LibreOJ #6165. 一道水题 /* LibreOJ #6165. 一道水题 欧拉线性筛 其实题意就是求区间[1, n]所有数的最小公倍数 那么答案就是所有质因子最大幂次的乘积 ...

  9. windows下安装redis、celery,并启动测试

    Windows 环境下基于 Redis 的 Celery 任务调度模块的实现 搭建环境: Windows-x64 10 Celery 3.1.23 Celery-with-redis 3.0 Redi ...

  10. 小程序demo项目实践

    今天开始做一个简单的小程序,做的过程中势必会有一些知识经验需要记录 项目初始化 首先创建好一个小程序项目,在app.wxss里面将自带的css样式统统去除,加上自己写的初始化样式 小程序目前不支持*号 ...