溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PostgreSQL數(shù)據(jù)庫事務(wù)插入刪除及更新操作的方法

發(fā)布時(shí)間:2022-04-11 15:22:51 來源:億速云 閱讀:141 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了PostgreSQL數(shù)據(jù)庫事務(wù)插入刪除及更新操作的方法的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇PostgreSQL數(shù)據(jù)庫事務(wù)插入刪除及更新操作的方法文章都會有所收獲,下面我們一起來看看吧。

INSERT

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

創(chuàng)建一個(gè)表:

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,…)稱為值清單。列清單和值清單個(gè)數(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');

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

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

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

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

插入默認(rèn)值:

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

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

隱式方法設(shè)置默認(rèn)值,在列清單和值清單里面,省略設(shè)置為默認(rèn)值的列。

如果省略未設(shè)置為默認(rèn)值的列,該列的值將被置為NULL。這一列如果是NOT NULL約束,將報(bào)錯(cuò)。

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

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

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

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_date
  FROM Product;

使用包含GROUP BY子句的SELECT語句進(jìn)行插入:

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

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

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

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

PostgreSQL數(shù)據(jù)庫事務(wù)插入刪除及更新操作的方法

DELETE

DROP TABLE語句,將表刪除。

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

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

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

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

刪除部分?jǐn)?shù)據(jù)行:

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

UPDATE

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

格式:

UPDATE <表名>
SET <列名> = <表達(dá)式>;

改變r(jià)egist_date列的所有數(shù)據(jù)。

UPDATE Product
   SET regist_date = '2222-02-02';

修改后效果如下。

PostgreSQL數(shù)據(jù)庫事務(wù)插入刪除及更新操作的方法

更新部分?jǐn)?shù)據(jù)行:

UPDATE <表名>
SET <列名> = <表達(dá)式>
WHERE <條件>;
UPDATE Product
   SET sale_price = sale_price * 10
 WHERE product_type = '廚房用具';

將列更新為NULL:

前提是這個(gè)列沒有設(shè)置NOT NULL約束和主鍵約束。

UPDATE Product
   SET regist_date = NULL
 WHERE product_id = '0008';

同時(shí)更新多個(gè)列:

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

事務(wù)

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

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

格式:

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

例子:

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

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

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

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

不使用開始語句情況下,SQL Server、PostgreSQL、MySQL里面默認(rèn)使用自動(dòng)提交模式,每條SQL語句就是一個(gè)事務(wù)。

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

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

DBMS的事務(wù)遵循ACID特性。

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

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

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

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

關(guān)于“PostgreSQL數(shù)據(jù)庫事務(wù)插入刪除及更新操作的方法”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“PostgreSQL數(shù)據(jù)庫事務(wù)插入刪除及更新操作的方法”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI