天天看點

GreenPlum的那些事《四》——增删改查

上文我們介紹了GPDB的常用管理操作,今天我們來說下它的增删改查。這是對于一個資料庫最基本的功能了,然而GPDB有它自己的特性,我們一起來看下。

插入資料

按列插入資料:

gptest=# create table products (name varchar(20),price numeric(10,2),product_no bigint)  distributed by  (product_no);                     
CREATE TABLE
gptest=# INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);
INSERT 0 1
gptest=# select * from products;
  name  | price | product_no 
--------+-------+------------
 Cheese |  9.99 |          1
(1 row)
           

同僚插入多列:

gptest=# INSERT INTO products (product_no, name, price) VALUES
gptest-#     (1, 'Cheese', 9.99),
gptest-#     (2, 'Bread', 1.99),
gptest-#     (3, 'Milk', 2.99);
INSERT 0 3
gptest=# select * from products;                                                                                                            name  | price | product_no 
--------+-------+------------
 Cheese |  9.99 |          1
 Cheese |  9.99 |          1
 Bread  |  1.99 |          2
 Milk   |  2.99 |          3
(4 rows)           

我們看到了GPDB插入資料和普通資料庫一樣,那麼是否可以像傳統的DBMS一樣用作OLTP系統呢。不是的!GPDB官方文檔指出對于append表最大127個并發實務操作,是以你不能把它用作生産業務系統資料庫,對于高并發并不合适!對于頻繁的資料插入操作,我們通常不用insert操作,用copy指令,後面我們會介紹。

更新資料

gptest=# UPDATE products SET price = 10 WHERE price = 9.99;
UPDATE 2
gptest=# select * from products;
  name  | price | product_no 
--------+-------+------------
 Bread  |  1.99 |          2
 Cheese | 10.00 |          1
 Cheese | 10.00 |          1
 Milk   |  2.99 |          3
(4 rows)
           

删除資料

gptest=# DELETE FROM products WHERE price = 10;
DELETE 2
gptest=# select * from products;
 name  | price | product_no 
-------+-------+------------
 Milk  |  2.99 |          3
 Bread |  1.99 |          2
(2 rows)
           

清空表資料

gptest=# truncate table products;
TRUNCATE TABLE
gptest=# select * from products; 
 name | price | product_no 
------+-------+------------
(0 rows)
           

GPDB的删除和更新操作,并不是直接實體删除資料,而是對資料打了一個标志,select查詢的時候看不到而已,GPDB會定時自動清空這些資料,回收空間。當然你也可以手動運作VACUUM 指令來手動回收空間。

VACUUM products           

删除資料後,最好運作一下VACUUM,對于大表,不要輕易做VACUUM!