返回首页

gbase数据、南大通用产品文档:GBase8cSQLExecDirect

更新日期:2024年09月11日


GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
9

语法格式
INSERT [INTO] [database_name.]table_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...

INSERT [INTO] [database_name.]table_name
[PARTITION (partition_name)] [(col_name,...)]
SELECT ... FROM [database_name.]table_name ...
说明
INSERT 将新行插入到一个已存在的表中。INSERT...VALUES 形式的语句基于明确
的值插入记录行。INSERT ... SELECT 形式的语句从另一个或多个表中选取出值,

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 689
并将其插入。
参数说明

table_name:是要被插入数据的表。

col_name:指出语句指定的值赋给哪个列。

PARTITION:只能用于跨引擎分区表,将数据插入到,分区表中分区名为
partition_name 的分区中,需要注意的是,partition_name 中有最新分区以外的
其他分区,语句将会报错。

如果在INSERT...VALUES 或INSERT...SELECT 中没有指定column 列,
那么所
有列的值必须在VALUES()列表中或由SELECT 提供。如果用户不知道表的列
的次序,可以使用DESC table_name 来查看。

使用关键词DEFAULT,明确地把列设置为默认值。这样,编写向所有列赋值
的INSERT 语句时可以更容易,
因为使用DEFAULT 可以避免编写出不完整的、
未包含全部列值的VALUES 清单。如果不使用DEFAULT,用户必须注明每一
个列的名称,与VALUES 中的每个值对应。

可以使用DEFAULT (col_name)作为设置列默认值的一个更通用的形式。

如果column 列表和VALUES 列表都为空,INSERT 将创建一个行,它的每一
列都设置为它的默认值。

可以指定一个表达式expr 来提供列值。例如,插入一个INT 型的数据表达式
可以写为INSERT INTO t(a) VALUES(3+5);
示例

示例1:INSERT INTO...
gbase> CREATE TABLE t0(id int) REPLICATED;
Query OK, 0 rows affected
gbase> INSERT INTO t0 VALUES(1),(2),(3),(4),(5),(6),(2),(3),(1);
Query OK, 9 rows affected
Records: 9 Duplicates: 0 Warnings: 0

gbase> SELECT * FROM t0;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 690
| 6 |
| 2 |
| 3 |
| 1 |
+------+
9 rows in set

示例2:INSERT INTO...SELECT...
gbase> CREATE TABLE t0(id int) REPLICATED;
Query OK, 0 rows affected

gbase>
INSERT
INTO
t0(id)
SELECT
DISTINCT
lo_custkey
FROM
ssbm.lineorder
LIMIT
15;
Query OK, 15 rows affected
Records: 15 Duplicates: 0 Warnings: 0

gbase> SELECT * FROM t0;
+-------+
| id |
+-------+
| 25738 |
| 18238 |
| 20612 |
| 5393 |
| 5954 |
| 11728 |
| 17302 |
| 14578 |
| 2210 |
| 27362 |
| 1642 |
| 29255 |
| 10745 |
| 7180 |
| 16276 |
+-------+
15 rows in set

示例3:INSERT INTO ... VALUES(DEFAULT)
gbase> CREATE TABLE t0(id int DEFAULT 1) REPLICATED;
Query OK, 0 rows affected

gbase> INSERT INTO t0 (id) VALUES(DEFAULT);
Query OK, 1 row affected

-- 也可以这样指定默认值进行插入

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 691
gbase> INSERT INTO t0 (id) VALUES(DEFAULT(id));
Query OK, 1 row affected

gbase> SELECT * FROM t0;
+------+
| id |
+------+
| 1 |
| 1 |
+------+
2 rows in set

示例4:INSERT 时,自动更新TIMESTAMP 列。
示例中用到的表如下:
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(a timestamp , b int) DISTRIBUTED BY ('b');

gbase> INSERT INTO t1(b) VALUES(1);
Query OK, 1 row affected

gbase> INSERT INTO t1(b) VALUES (2);
Query OK, 1 row affected

gbase> INSERT INTO t1(b) VALUES (3);
Query OK, 1 row affected

gbase> INSERT INTO t1(b) VALUES (4);
Query OK, 1 row affected

gbase> INSERT INTO t1(b) VALUES (5);
Query OK, 1 row affected

gbase> SELECT * FROM t1 ORDER BY a;
+---------------------+------+
| a | b |
+---------------------+------+
| 2013-12-17 14:04:43 | 1 |
| 2013-12-17 14:04:47 | 2 |
| 2013-12-17 14:04:52 | 3 |
| 2013-12-17 14:04:59 | 4 |
| 2013-12-17 14:05:04 | 5 |
+---------------------+------+
5 rows in set
使用INSERT INTO t1 VALUES(),()语法时,此时INSERT 完成后数据行对应的

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 692
TIMESTAMP 列的值自动更新为一个时间戳。
gbase> INSERT INTO t1(b) VALUES (6),(7);
Query OK, 1 row affected
b=6 和b=7 对应的TIMESTAMP 列自动更新为一个时间戳。
gbase> SELECT * FROM t1 ORDER BY a;
+---------------------+------+
| a | b |
+---------------------+------+
| 2013-12-17 15:44:29 | 1 |
| 2013-12-17 15:44:30 | 2 |
| 2013-12-17 15:44:31 | 3 |
| 2013-12-17 15:44:32 | 4 |
| 2013-12-17 15:44:33 | 5 |
| 2013-12-17 15:44:48 | 7 |
| 2013-12-17 15:44:48 | 6 |
+---------------------+------+
7 rows in set

注意
INSERT ... SELECT 形式的语句,类型边界值仍以各引擎为准。

说明
默认脱敏函数针对基本类型的数据列进行脱敏。
1. 若数据类型包含date、datetime 和time。

date 会以“1900-01-01”显示;

datetime 会以“1900-01-01 00:00:00”显示;

time 会以“00:00:00”显示。
2. 若数据类型是整型、浮点型和decimal。

整型和浮点型会显示0;

decimal 会显示为0.000...,带有结果小数位(定义的类型或者评估的类
型)个数0。
3. 若数据类型是字符串类型的。
将会替换为固定4 个X 字符“xxxx”。
4. NULL 值。
不做脱敏处理,显示为NULL。
5. SQL 函数。
如果SQL 函数的任一参数含有脱敏属性,则按照函数返回结果类型,执行
默认脱敏。
示例

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 282
gbase> CREATE TABLE t_m_default(name VARCHAR(10) MASKED WITH(FUNCTION =
'DEFAULT()'),b_date
DATETIME
MASKED
WITH(FUNCTION
=
'DEFAULT()'),age
INT
MASKED
WITH(FUNCTION = 'DEFAULT()'));
Query OK, 0 rows affected (Elapsed: 00:00:00.53)

gbase>
INSERT
INTO
t_m_default
VALUES('Jone
smith','1989-03-04
12:31:24.123000',29);
Query OK, 1 row affected (Elapsed: 00:00:00.12)

gbase> SELECT * FROM t_m_default;
+------+---------------------+------+
| name | b_date | age |
+------+---------------------+------+
| xxxx | 1900-01-01 00:00:00 | 0 |
+------+---------------------+------+
1 row in set (Elapsed: 00:00:00.09)

表 5-8 单行数据
姓名(varchar)
出生日期(datetime)
年龄(int)
Jone smith
1989-03-04
12:31:24.123000
29
表 5-9 应用默认脱敏后数据显示
姓名(varchar)
出生日期(datetime)
年龄(int)
xxxx
1900-01-01 00:00:00
0