日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

PostgreSQL 插入、删除、更新、事务

發(fā)布時間:2025/3/12 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PostgreSQL 插入、删除、更新、事务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

INSERT

使用INSERT語句可以向表中插入數(shù)據(jù)。

創(chuàng)建一個表:

CREATE TABLE ProductIns (product_id CHAR(4) NOT NULL,product_name VARCHAR(100) NOT NULL,product_type VARCHAR(32) NOT NULL,sale_price INTEGER DEFAULT 0,purchase_price INTEGER ,regist_date DATE ,PRIMARY KEY (product_id));

向表中插入數(shù)據(jù):

INSERT語句格式:

里面的(列1,列2,…)稱為列清單;(值1,值2,…)稱為值清單。列清單和值清單個數(shù)要保持一致。

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

對表的所有列進行INSERT時,可省略列清單。從左到右將值清單里面數(shù)據(jù)賦給每一列。

INSERT INTO ProductIns VALUES ('0005', '鐵鍋', '廚房用具', 6800, 5000, '2222-01-15');

插入NULL,直接在值清單里面寫NULL就行,前提是插入NULL的列不能設置NOT NULL約束。

INSERT INTO ProductIns VALUES ('0006', '勺子', '廚房用具', 500, NULL, '2222-09-20');

插入默認值:

前面創(chuàng)建ProductIns表設置sale_price默認值為0。在創(chuàng)建表的時候,設定了默認值,使用INSERT語句插入默認值的方法如下。

--顯式方法設置默認值 INSERT INTO ProductIns VALUES ('0007', '筷子', '廚房用具', DEFAULT, 790, '2222-04-28');

隱式方法設置默認值,在列清單和值清單里面,省略設置為默認值的列。

如果省略未設置為默認值的列,該列的值將被置為NULL。這一列如果是NOT NULL約束,將報錯。

--隱式方法設置默認值 INSERT INTO ProductIns (product_id, product_name, product_type, purchase_price, regist_date) VALUES ('0007', '筷子', '廚房用具', 790, '2222-04-28');

從其他表中復制數(shù)據(jù):

創(chuàng)建一張和Product結(jié)構相同的表。

CREATE TABLE ProductCopy (product_id CHAR(4) NOT NULL,product_name VARCHAR(100) NOT NULL,product_type VARCHAR(32) NOT NULL,sale_price INTEGER ,purchase_price INTEGER ,regist_date DATE ,PRIMARY KEY (product_id));

可以像下面把Product表中數(shù)據(jù)插入到ProductCopy表里。INSERT語句里面的SELECT語句,可以使用WHERE子句、GROUP BY子句等等。

INSERT INTO ProductCopy (product_id, product_name, product_type, sale_price, purchase_price, regist_date) SELECT product_id, product_name, product_type, sale_price, purchase_price, regist_dateFROM Product;

使用包含GROUP BY子句的SELECT語句進行插入:

創(chuàng)建一個以商品種類匯總的表。

CREATE TABLE ProductType (product_type VARCHAR(32) NOT NULL,sum_sale_price INTEGER ,sum_purchase_price INTEGER ,PRIMARY KEY (product_type));

通過下面,得到一個根據(jù)商品種類分組的表,并且計算出每個種類的價格的和。

INSERT INTO ProductType (product_type, sum_sale_price, sum_purchase_price) SELECT product_type, SUM(sale_price), SUM(purchase_price)FROM ProductGROUP BY product_type;

DELETE

DROP TABLE語句,將表刪除。

DELETE語句,刪除表里面的數(shù)據(jù)。

DELETE語句的對象是行,不是列,無法只刪除部分列的數(shù)據(jù)。

刪除全部數(shù)據(jù)行:

格式 DELETE FROM <表名>; 例子 DELETE FROM Product;

刪除部分數(shù)據(jù)行:

格式 DELETE FROM <表名> WHERE <條件>; 例子 DELETE FROM Product WHERE sale_price >= 2000;

UPDATE

UPDATE語句用于改變表中數(shù)據(jù)。

格式:

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

改變regist_date列的所有數(shù)據(jù)。

UPDATE ProductSET regist_date = '2222-02-02';

修改后效果如下。

更新部分數(shù)據(jù)行:

UPDATE <表名> SET <列名> = <表達式> WHERE <條件>; UPDATE ProductSET sale_price = sale_price * 10WHERE product_type = '廚房用具';

將列更新為NULL:

前提是這個列沒有設置NOT NULL約束和主鍵約束。

UPDATE ProductSET regist_date = NULLWHERE product_id = '0008';

同時更新多個列:

-- 使用逗號,所有DBMS中均可使用 UPDATE ProductSET sale_price = sale_price * 10,purchase_price = purchase_price / 2WHERE product_type = '廚房用具'; -- 列表形式,在某些DBMS中無法使用 UPDATE ProductSET (sale_price, purchase_price) = (sale_price * 10, purchase_price / 2)WHERE product_type = '廚房用具';

事務

事務transaction,需要在同一處理單元中執(zhí)行的一系列更新處理的集合。

有時候要對一個表進行多個處理。比如為了某件事,需要把a的價格增加,把b的價格減少,此時,多個處理是作為同一個處理單元執(zhí)行的。這個時候就可以用事務來處理。

格式:

事務開始語句; DML語句1; DML語句2; ... 事務結(jié)束語句;

例子:

其中,用戶需要明確指出事務的結(jié)束。結(jié)束事務的指令有COMMIT、ROLLBACK。

COMMIT,提交事務包含的更新處理。一旦提交,無法恢復事務開始前的狀態(tài)。

ROLLBACK,取消事務包含的更新處理,相當于放棄保存,恢復事務開始前的狀態(tài)。

事務在數(shù)據(jù)庫連接建立時,已經(jīng)悄悄開始。

不使用開始語句情況下,SQL Server、PostgreSQL、MySQL里面默認使用自動提交模式,每條SQL語句就是一個事務。

Oracle里面,是直到用戶執(zhí)行COMMIT或者ROLLBACK,算一個事務。

--PostgreSQL BEGIN TRANSACTION;UPDATE ProductSET sale_price = sale_price + 1000WHERE product_name = 'T恤';UPDATE ProductSET sale_price = sale_price - 1000WHERE product_name = '褲子';COMMIT;

DBMS的事務遵循ACID特性。

原子性Atomicity,事務結(jié)束時,其中的更新處理要么都執(zhí)行(COMMIT),要么都不執(zhí)行(ROLLBACK)。

一致性Consistency,事務中的處理,要滿足數(shù)據(jù)庫設置的約束,如主鍵約束、NOT NULL約束。

隔離性Isolation,不同事務之間互不干擾。一個事務向表中添加數(shù)據(jù),沒提交前,別的事務看不到新添加的數(shù)據(jù)。

持久性Durability,事務結(jié)束后,該時間點的數(shù)據(jù)狀態(tài)會被保存。如果由于系統(tǒng)故障數(shù)據(jù)丟失,也能用一些方法恢復。

總結(jié)

以上是生活随笔為你收集整理的PostgreSQL 插入、删除、更新、事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。