PostgreSQL学习笔记——事务
- 事务时需要在同一处理单元中执行的一系列更新处理的集合。通过使用事务,可以对数据库中的数据更新处理的提交和取消进行管理。
- 事务处理的终止指令包括COMMIT(提交处理)和ROLLBACK(取消处理)两种。
- DBMS的事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四种特性,统称为ACID特性。
举个例子,比如你在一个销售部门工作,这个时候领导分配给你一个工作:
“zifeiy,我们决定把运动T恤的销售单价下调100元,同时把T恤衫的销售单价上浮100元,麻烦你去更新一下数据库。”
那么其实这么一个任务中时包含两个步骤的:
- 将运动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恤衫';
上述连个操作要作为同一个处理单元执行。
也就是说:“要么都执行,要么都不执行。”
遇到这种需要在同一个处理单元中执行一系列更新操作的情况,一定要使用事务来进行处理。
创建事务
如果想在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学习笔记——事务的更多相关文章
- MySQL学习笔记-事务相关话题
事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...
- Postgresql学习笔记
一:数据类型 主要有三大类以及其他一些杂项类型: 数值型.字符型.日期型. 数值型: 名称 描述 存储大小 范围 smallint 存储整数,小范围 2字节 -32768 至 +32767 integ ...
- postgresql学习笔记--基础篇 - copy
1. psql 导入/导出数据 psql支持文件数据导入到数据库,也支持数据库表数据导出到文件中. COPY命令和\copy 命令都支持这两类操作,但两者有如下区别: COPY 命令是SQL命令,\c ...
- postgresql学习笔记--基础篇 -psql工具
--创建用户 CREATE ROLE pguser WITH ENCRYPTED PASSWORD 'pguser'; --创建表空间目录 mkdir -p /database/pg10/pg_tbs ...
- postgresql学习笔记--基础篇
1. 客户端程序和服务器端程序 1.1 客户端程序 Command Example Describe clusterdb clusterdb -h pghost1 -p 1921 -d mydb Cl ...
- PostgreSQL学习笔记——摘要
因为PostgreSQL和MySQL.DB2等数据库均遵循SQL语法,所以这篇随笔仅记录一些PostgreSQL中和别的数据库有差别或之前学习中遗漏的地方,以及一些我觉得比较重点的地方. 通过psql ...
- PostgreSQL学习笔记(二)-安装pgAdmin
继上篇安装PostgreSQL后,我们需要安装一个PostgreSQL的图形化管理工具. pgadmin管理工具 创建Python的虚拟环境 cd /root/venv python -m venv ...
- PostgreSQL学习笔记(一)-安装PostgreSQL
PostgreSQL官网:https://www.postgresql.org/docs/11/index.html1.如何安装2.如何修改配置文件3.如何设置自动启动4.如何修改数据用户密码 本文环 ...
- jsp+postgresql学习笔记(1)用户登录与注册
前期准备: tomcat的安装与配置(略) jdk的安装与配置(略) eclipse软件安装与配置(略) webstrom软件或IDEA的安装与配置(大概用了IDEA就不需要eclipse了,但是怎么 ...
随机推荐
- ajax二进制流乱码图片解决方法
仅供自己参考 参考博客 在请求成功的地方 添加以下代码: var blob=new Blob(); blob=this.response; 既然二进制数据拿到了,那么要把它放在一个 html标签中,并 ...
- machine learning(8) -- classification
分类预测不能使用linear regression, linear regression算法对于分类预测效果很差,应使用logistic regression算法 Logistic regressti ...
- Web前端 --- 前端基础简介
目录 web端 HTTP协议 web端 1.前端,后端 什么是前端 任何与用户直接打交道的操作界面,都可以称之为前端, eg:电脑界面 手机界面 什么是后端 真正的幕后操作者 2.前端学习的历程 HT ...
- 系统空闲时间 解决 GetLastInputInfo 负数问题
using System;using System.Collections.Generic;using System.Linq;using System.Runtime.InteropServices ...
- 作业调度系统PBS(Torque)的设置
1.修改/var/spool/torque/server_priv/目录下的nodes文件 Node1 np=16 gpus=4 Node2 np=16 gpus=4 ... 其中Node1为计算节点 ...
- PHP 连接MySQL
连接MySQL 在我们访问MySQL数据库前,我们需要先连接到数据库服务器: 实例(MySQLi - 面向对象) <?php $servername = "localhost" ...
- sql server newid() 的用法
sql newid()随机函数 从A表随机取2条记录,用SELECT TOP 10 * FROM ywle order by newid()order by 一般是根据某一字段排序,newid() ...
- <load-on-startup>1</load-on-startup>的作用
1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法).2)它的值必须是一个整数,表示servlet应该被载入的顺序3)当值为0或者大 ...
- CF798D Mike and distribution 贪心
我感觉这道题挺神的~ 假设 $a[i]=b[i]$,那么我们可以将 $a$ 降序排序,然后你发现只要你按照 $1,3,5......n$ 这么取一定是合法的. 而我们发现 $2$ 比取 $3$ 优,取 ...
- angular2事件触发
输入框输入过程触发Select()方法. <input type="text" name="code" [(ngModel)]="code&qu ...