PostgreSQL数据库事务插入删除及更新操作的方法(postgresql,开发技术)

时间:2024-05-02 03:27:11 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

INSERT

使用INSERT语句可以向表中插入数据。

创建一个表:

CREATETABLEProductIns(product_idCHAR(4)NOTNULL,product_nameVARCHAR(100)NOTNULL,product_typeVARCHAR(32)NOTNULL,sale_priceINTEGERDEFAULT0,purchase_priceINTEGER,regist_dateDATE,PRIMARYKEY(product_id));

向表中插入数据:

INSERT语句格式:

里面的(列1,列2,…)称为列清单;(值1,值2,…)称为值清单。列清单和值清单个数要保持一致。

INSERTINTO<表名>(列1,列2,...)VALUES(值1,值2,...);
INSERTINTOProductIns(product_id,product_name,product_type,sale_price,purchase_price,regist_date)VALUES('0001','T恤','衣服',1000,500,'2222-09-20');

对表的所有列进行INSERT时,可省略列清单。从左到右将值清单里面数据赋给每一列。

INSERTINTOProductInsVALUES('0005','铁锅','厨房用具',6800,5000,'2222-01-15');

插入NULL,直接在值清单里面写NULL就行,前提是插入NULL的列不能设置NOT NULL约束。

INSERTINTOProductInsVALUES('0006','勺子','厨房用具',500,NULL,'2222-09-20');

插入默认值:

前面创建ProductIns表设置sale_price默认值为0。在创建表的时候,设定了默认值,使用INSERT语句插入默认值的方法如下。

--显式方法设置默认值INSERTINTOProductInsVALUES('0007','筷子','厨房用具',DEFAULT,790,'2222-04-28');

隐式方法设置默认值,在列清单和值清单里面,省略设置为默认值的列。

如果省略未设置为默认值的列,该列的值将被置为NULL。这一列如果是NOT NULL约束,将报错。

--隐式方法设置默认值INSERTINTOProductIns(product_id,product_name,product_type,purchase_price,regist_date)VALUES('0007','筷子','厨房用具',790,'2222-04-28');

从其他表中复制数据:

创建一张和Product结构相同的表。

CREATETABLEProductCopy(product_idCHAR(4)NOTNULL,product_nameVARCHAR(100)NOTNULL,product_typeVARCHAR(32)NOTNULL,sale_priceINTEGER,purchase_priceINTEGER,regist_dateDATE,PRIMARYKEY(product_id));

可以像下面把Product表中数据插入到ProductCopy表里。INSERT语句里面的SELECT语句,可以使用WHERE子句、GROUP BY子句等等。

INSERTINTOProductCopy(product_id,product_name,product_type,sale_price,purchase_price,regist_date)SELECTproduct_id,product_name,product_type,sale_price,purchase_price,regist_dateFROMProduct;

使用包含GROUP BY子句的SELECT语句进行插入:

创建一个以商品种类汇总的表。

CREATETABLEProductType(product_typeVARCHAR(32)NOTNULL,sum_sale_priceINTEGER,sum_purchase_priceINTEGER,PRIMARYKEY(product_type));

通过下面,得到一个根据商品种类分组的表,并且计算出每个种类的价格的和。

INSERTINTOProductType(product_type,sum_sale_price,sum_purchase_price)SELECTproduct_type,SUM(sale_price),SUM(purchase_price)FROMProductGROUPBYproduct_type;

PostgreSQL数据库事务插入删除及更新操作的方法

DELETE

DROP TABLE语句,将表删除。

DELETE语句,删除表里面的数据。

DELETE语句的对象是行,不是列,无法只删除部分列的数据。

删除全部数据行:

格式DELETEFROM<表名>;例子DELETEFROMProduct;

删除部分数据行:

格式DELETEFROM<表名>WHERE<条件>;例子DELETEFROMProductWHEREsale_price>=2000;

UPDATE

UPDATE语句用于改变表中数据。

格式:

UPDATE<表名>SET<列名>=<表达式>;

改变regist_date列的所有数据。

UPDATEProductSETregist_date='2222-02-02';

修改后效果如下。

PostgreSQL数据库事务插入删除及更新操作的方法

更新部分数据行:

UPDATE<表名>SET<列名>=<表达式>WHERE<条件>;
UPDATEProductSETsale_price=sale_price*10WHEREproduct_type='厨房用具';

将列更新为NULL:

前提是这个列没有设置NOT NULL约束和主键约束。

UPDATEProductSETregist_date=NULLWHEREproduct_id='0008';

同时更新多个列:

--使用逗号,所有DBMS中均可使用UPDATEProductSETsale_price=sale_price*10,purchase_price=purchase_price/2WHEREproduct_type='厨房用具';
--列表形式,在某些DBMS中无法使用UPDATEProductSET(sale_price,purchase_price)=(sale_price*10,purchase_price/2)WHEREproduct_type='厨房用具';

事务

事务transaction,需要在同一处理单元中执行的一系列更新处理的集合。

有时候要对一个表进行多个处理。比如为了某件事,需要把a的价格增加,把b的价格减少,此时,多个处理是作为同一个处理单元执行的。这个时候就可以用事务来处理。

格式:

事务开始语句;DML语句1;DML语句2;...事务结束语句;

例子:

其中,用户需要明确指出事务的结束。结束事务的指令有COMMIT、ROLLBACK。

COMMIT,提交事务包含的更新处理。一旦提交,无法恢复事务开始前的状态。

ROLLBACK,取消事务包含的更新处理,相当于放弃保存,恢复事务开始前的状态。

事务在数据库连接建立时,已经悄悄开始。

不使用开始语句情况下,SQL Server、PostgreSQL、MySQL里面默认使用自动提交模式,每条SQL语句就是一个事务。

Oracle里面,是直到用户执行COMMIT或者ROLLBACK,算一个事务。

--PostgreSQLBEGINTRANSACTION;UPDATEProductSETsale_price=sale_price+1000WHEREproduct_name='T恤';UPDATEProductSETsale_price=sale_price-1000WHEREproduct_name='裤子';COMMIT;

DBMS的事务遵循ACID特性。

原子性Atomicity,事务结束时,其中的更新处理要么都执行(COMMIT),要么都不执行(ROLLBACK)。

一致性Consistency,事务中的处理,要满足数据库设置的约束,如主键约束、NOT NULL约束。

隔离性Isolation,不同事务之间互不干扰。一个事务向表中添加数据,没提交前,别的事务看不到新添加的数据。

持久性Durability,事务结束后,该时间点的数据状态会被保存。如果由于系统故障数据丢失,也能用一些方法恢复。

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:PostgreSQL数据库事务插入删除及更新操作的方法的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:C语言数据结构中单向环形链表怎么实现下一篇:

3 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18