在创建一个表后,表中并没有数据,使用这个表之前,需要向表中插入数据。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
如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。