首页 > 数据库 >PostgreSQL教程:事务的ACID特性及基本使用

PostgreSQL教程:事务的ACID特性及基本使用

时间:2023-09-24 23:07:43浏览次数:47  
标签:教程 PostgreSQL -- 要么 事务 提交 操作 ACID


什么是ACID?

在日常操作中,对于一组相关操作,通常要求要么都成功,要么都失败。在关系型数据库中,称这一组操作为事务。为了保证整体事务的安全性,有ACID这一说:

  • 原子性A:事务是一个最小的执行单位,一次事务中的操作要么都成功,要么都失败。
  • 一致性C:在事务完成时,所有数据必须保持在一致的状态。(事务完成后吗,最终结果和预期结果是一致的)
  • 隔离性:一次事务操作,要么是其他事务操作前的状态,要么是其他事务操作后的状态,不存在中间状态。
  • 持久性:事务提交后,数据会落到本地磁盘,修改是永久性的。

PostgreSQL中,在事务的并发问题里,也是基于MVCC,多版本并发控制去维护数据的一致性。相比于传统的锁操作,MVCC最大的有点就是可以让 读写互相不冲突

当然,PostgreSQL也支持表锁和行锁,可以解决写写的冲突问题。

PostgreSQL相比于其他数据,有一个比较大的优化,DDL也可以包含在一个事务中。比如集群中的操作,一个事务可以保证多个节点都构建出一个表,才算成功。

事务的基本使用

首先基于前面的各种操作,应该已经体会到了,PostgreSQL是自动提交事务。跟MySQL是一样的。

可以基于关闭PostgreSQL的自动提交事务来进行操作。

PostgreSQL教程:事务的ACID特性及基本使用_postgresql

但是上述方式比较麻烦,传统的方式。

就是三个命令:

  • begin:开始事务
  • commit:提交事务
  • rollback:回滚事务
-- 开启事务
begin;
-- 操作
insert into test values (7,'bbb',12,5);
-- 提交事务 
commit;


标签:教程,PostgreSQL,--,要么,事务,提交,操作,ACID
From: https://blog.51cto.com/zhangxueliang/7589218

相关文章

  • PostgreSQL教程:触发器
    触发器Trigger,是由事件触发的一种存储过程当对标进行insert,update,delete,truncate操作时,会触发表的Trigger(看触发器的创建时指定的事件)构建两张表,学生信息表,学生分数表。在删除学生信息的同时,自动删除学生的分数。先构建表信息,填充数据createtablestudent(idint,namev......
  • PostgreSQL教程:约束(主键、非空、唯一、检查约束)
    核心在于构建表时,要指定上一些约束。约束主键--主键约束droptabletest;createtabletest(idbigserialprimarykey,namevarchar(32));非空--非空约束droptabletest;createtabletest(idbigserialprimarykey,namevarchar(32)notnull);......
  • PostgreSQL教程:数组类型
    数组还是要依赖其他类型,比如在设置住址,住址可能有多个住址,可以采用数组类型去修饰字符串。PGSQL中,指定数组的方式就是[],可以指定一维数组,也支持二维甚至更多维数组。构建数组的方式:droptabletest;createtabletest(idserial,col1int[],col2int[2],col3......
  • PostgreSQL教程:JSON&JSONB类型
    JSON在MySQL8.x中也做了支持,但是MySQL支持的不好,因为JSON类型做查询时,基本无法给JSON字段做索引。PGSQL支持JSON类型以及JSONB类型。JSON和JSONB的使用基本没区别。撇去JSON类型,本质上JSON格式就是一个字符串,比如MySQL5.7不支持JSON的情况的下,使用text也可以,但是字符串类型无法校验......
  • PostgreSQL教程:IP类型cidr
    PGSQL支持IP类型的存储,支持IPv4,IPv6这种,甚至Mac内种诡异类型也支持这种IP类型,可以在存储IP时,帮助做校验,其次也可以针对IP做范围查找。IP校验的效果IP也支持范围查找。......
  • PostgreSQL教程:枚举类型
    枚举类型MySQL也支持,只是没怎么用,PGSQL同样支持这种数据类型可以声明枚举类型作为表中的字段类型,这样可以无形的给表字段追加诡异的规范。--声明一个星期的枚举,值自然只有周一~周日。createtypeweekasenum('Mon','Tues','Sun');--声明一张表,表中的某个字段的类型是上面声......
  • PostgreSQL教程:日期类型
    在PGSQL中,核心的时间类型,就三个。timestamp(时间戳,覆盖年月日时分秒)date(年月日)time(时分秒)在PGSQL中,声明时间的方式。只需要使用字符串正常的编写yyyy-MM-ddHH:mm:ss就可以转换为时间类型。直接在字符串位置使用之前讲到的数据类型转换就可以了。当前系统时间:-可以使用now作为......
  • PostgreSQL教程:数值类型(整型、浮点型、序列、数值的常见操作)
    整型整型比较简单,主要就是三个:smallint、int2:2字节integer、int、int4:4字节bigint、int8:8字节正常没啥事就integer,如果要存主键,比如雪花算法,那就bigint。空间要节约,根据情况smallint浮点型浮点类型就关注2个(其实是一个)decimal(n,m):本质就是numeric,PGSQL会帮你转换numeric(n,m):PGSQL......
  • PostgreSQL教程:布尔类型
    布尔类型简单的丫批,可以存储三个值,true,false,null--布尔类型的约束没有那么强,true,false大小写随意,他会给你转,同时yes,no这种他也认识,但是需要转换selecttrue,false,'yes'::boolean,boolean'no',True,FaLse,NULL::boolean;boolean类型在做and和or的逻辑操作时,结果字段A字段Baand......
  • PostgreSQL教程:单引号和双引号的使用、数据类型转换
    单引号和双引号在PGSQL中,写SQL语句时,单引号用来标识实际的值。双引号用来标识一个关键字,比如表名,字段名。--单引号写具体的值,双引号类似MySQL的``标记,用来填充关键字--下面的葡萄牙会报错,因为葡萄牙不是关键字select1.414,'卡塔尔',"葡萄牙";数据类型转换第一种方式:只需要在值......