创建表
在当前数据库中创建一个新的空白表,该表由命令执行者所有。在不同的数据库中可以存放相同的表。您可以使用CREATE TABLE语句创建表。
语法格式
CREATE TABLE table_name
(column_name data_type [, ... ]);
参数说明
table_name
要创建的表名。
column_name
新表中要创建的字段名。
data_type
字段的数据类型。
示例
执行如下命令创建一个表,表名为customer_t1,表字段为c_customer_sk 、c_customer_id、c_first_name和c_last_name,每个表字段对应的数据类型为integer、char(5)、char(6)和char(8)。
openGauss=# CREATE TABLE customer_t1
(
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8),
Amount integer
);
当结果显示为如下信息,则表示创建成功。
CREATE TABLE
插入数据(INSERT INTO)
在创建一个表后,表中并没有数据,使用这个表之前,需要向表中插入数据。INSERT INTO语句用于向表中插入新记录。该语句可以插入一行数据也可以同时插入多行数据。
语法格式
INSERT INTO table_name [ ( column_name [, ...] ) ]
{ DEFAULT VALUES
| VALUES {( { expression | DEFAULT } [, ...] ) }[, ...] };
参数说明
table_name
要插入数据的目标表名。
取值范围:已存在的表名。
column_name
目标表中的字段名:
- 字段名可以有子字段名或者数组下标修饰。
- 没有在字段列表中出现的每个字段,将由系统默认值,或者声明时的默认值填充,若都没有则用NULL填充。例如,向一个复合类型中的某些字段插入数据的话,其他字段将是NULL。
- 目标字段(column_name)可以按顺序排列。如果没有列出任何字段,则默认全部字段,且顺序为表声明时的顺序。
- 如果value子句只提供了N个字段,则目标字段为前N个字段。
- value子句提供的值在表中从左到右关联到对应列。
取值范围:已存在的字段名。
expression
赋予对应column的一个有效表达式或值:
- 向表中字段插入单引号 “ ' “时需要使用单引号自身进行转义。
- 如果插入行的表达式不是正确的数据类型,系统试图进行类型转换,若转换不成功,则插入数据失败,系统返回错误信息。
DEFAULT
对应字段名的缺省值。如果没有缺省值,则为NULL。
示例
向已创建成功的表customer_t1中插入一行。
数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。
openGauss=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name,Amount) VALUES (3769, 'hello', 'Grace', 1000); INSERT 0 1如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。
openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace',DEFAULT,1000); INSERT 0 1如果用户不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。例如:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace'); INSERT 0 1 等同于 openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello'); INSERT 0 1用户也可以对独立的字段或者整个行明确缺省值。
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT); INSERT 0 1 openGauss=# INSERT INTO customer_t1 DEFAULT VALUES; INSERT 0 1如果需要在表中插入多行,请使用以下命令。
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name,Amount) VALUES (6885, 'maps', 'Joes',2200), (4321, 'tpcds', 'Lily',3000), (9527, 'world', 'James',5000); INSERT 0 3如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。
更新数据(UPDATE)
修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行,所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。UPDATE修改满足条件的所有行中指定的字段值,WHERE子句声明条件,SET子句指定的字段会被修改,没有出现的字段则保持它们的原值。
语法格式
UPDATE table_name
SET column_name = { expression | DEFAULT }
[WHERE condition ];
参数说明
table_name
要更新的表名,可以使用模式修饰。例如,myshcema.table。
取值范围:已存在的表名称。
expression
赋给字段的值或表达式。
column_name
要修改的字段名。
取值范围:已存在的字段名。
condition
一个返回Boolean类型结果的表达式。只有这个表达式返回true的行才会被更新。
示例
执行如下命令将表customer_t1中c_customer_sk为9527的地域重新定义为9876。
openGauss=# UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;
UPDATE 1
这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是变量表达式。
比如,把所有c_customer_sk的值增加100:
openGauss=# UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100;
UPDATE 9
在这里省略了WHERE子句,表示表中的所有行都要被更新。如果出现了WHERE子句,那么只有匹配其条件的行才会被更新。
在SET子句中的等号是一个赋值,而在WHERE子句中的等号是比较。WHERE条件不一定是相等测试,许多其他的操作符也可以使用。
用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如:
openGauss=# UPDATE customer_t1 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421;
UPDATE 1删除数据(DELETE)
DELETE语句可以从指定的表里删除满足WHERE子句的行。如果WHERE子句不存在,将删除表中所有行,结果只保留表结构。
语法格式
DELETE FROM table_name
[WHERE condition];
参数说明
table_name
目标表的名称(可以有模式修饰)。
取值范围:已存在的表名。
condition
一个返回Boolean值的表达式,用于判断哪些行需要被删除。
示例
创建表customer_t1_bak,表的结构、数据与customer_t1一致。
openGauss=# CREATE TABLE customer_t1_bak AS TABLE customer_t1;
INSERT 0 9
创建的表customer_t1_bak,数据如下:
openGauss=# SELECT * FROM customer_t1_bak;
c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
3869 | hello | Grace | | 1000
3869 | hello | Grace | | 1000
3869 | | Grace | |
3869 | hello | | |
3869 | hello | | |
| | | |
6985 | maps | Joes | | 2200
9976 | world | James | | 5000
4421 | Admin | Local | | 3000
(9 rows)
执行如下语句删除customer_t1_bak中c_customer_sk等于3869的职员。
openGauss=# DELETE FROM customer_t1_bak WHERE c_customer_sk = 3869;
DELETE 5
得到的结果如下,可以看到c_customer_sk = 3869的行已经被删除。
openGauss=# SELECT * FROM customer_t1_bak;
c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
| | | |
6985 | maps | Joes | | 2200
9976 | world | James | | 5000
4421 | Admin | Local | | 3000
(4 rows)
不指定WHERE语句时,默认删除整张表的数据,仅保留表结构。
openGauss=# DELETE FROM customer_t1_bak;
DELETE 4
得到结果如下。
openGauss=# SELECT * FROM customer_t1_bak;
c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
(0 rows)




