返回首页

gbase数据、南大通用产品文档:GBase8s约束管理

更新日期:2024年09月11日

数据库中的约束是指数据表字段约束规则,
支持Check 方式和Unique 两种约束方式的创建。

其中Check 约束:在数据库中check 约束是指约束表中的某一个或者某些列中可接受的数
据值或者数据格式。
Unique 约束:唯一约束,字段列上记录不能重复,值必须唯一。

GBase 8s 企业管理器用户手册
南大通用数据技术股份有限公司

42

功能说明
INSERT 将新行插入到一个已存在的表中。INSERT...VALUES 形式的语句基于明
确的值插入记录行。INSERT ... SELECT 形式的语句从另一个或多个表中选取出
值,并将其插入。
语法格式
INSERT [INTO] [vc_name.][database_name.]table_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...

INSERT [INTO] [vc_name.][database_name.]table_name [(col_name,...)]
SELECT ... FROM [vc_name.][database_name.]table_name ...
表5- 93 参数说明
参数名称


vc_name
虚拟集群名,可选项。
database_name
数据库名,可选项。
table_name
表名,是要被插入数据的表。
col_name
指出语句指定的值赋给哪个列。如果在INSERT...VALUES 或
INSERT...SELECT 中没有指定column 列,
那么所有列的值必
须在VALUES()列表中或由SELECT 提供。如果用户不知道
表的列的次序,可以使用DESC table_name 来查看。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1045
参数名称


expr
指定一个表达式expr 来提供列值。例如插入一个INT 型的数
据表达式可以写为INSERT INTO t(a) VALUES(3+5)。
DEFAULT
使用关键词DEFAULT,明确地把列设置为默认值。使用
DEFAULT 可以避免编写出不完整的、未包含全部列值的
VALUES 清单。
可以使用DEFAULT (col_name)作为设置列默
认值的一个更通用的形式。如果不使用DEFAULT,
用户必须
注明每一个列的名称,与VALUES 中的每个值对应。
说明

如果column 列表和VALUES 列表都为空,
INSERT 将创建一个行,
它的每一列都设置为它的默认值。
示例
示例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 |
|
6 |
|
2 |
|
3 |
|
1 |
+------+
9 rows in set
示例2:INSERT INTO...SELECT...。
gbase> CREATE TABLE t0(id int) REPLICATED;

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1046
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> INSERT INTO t0 (id) VALUES(DEFAULT(id));
Query OK, 1 row affected
gbase> SELECT * FROM t0;
+------+
| id
|
+------+

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1047
|
1 |
|
1 |
+------+
2 rows in set
示例4:
INSERT 时,
自动更新TIMESTAMP 列。
使用INSERT INTO t1 VALUES(),()
语法时,
此时INSERT 完成后数据行对应的TIMESTAMP 列的值自动更新为一个
时间戳。b=6 和b=7 对应的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
gbase> INSERT INTO t1(b) VALUES (6),(7);
Query OK, 1 row affected
gbase> SELECT * FROM t1 ORDER BY a;
+---------------------+------+
| a
| b
|

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1048
+---------------------+------+
| 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

DECLARE
valid BOOLEAN := TRUE;
BEGIN
GOTO update_row;
IF valid THEN
<>
NULL;
END IF;
END;

--Result:
--GOTO update_row;
--*
--ERROR at line 4:
--ORA-06550: line 4, column 3:
--PLS-00375: illegal GOTO statement; this GOTO cannot transfer control to label
--'UPDATE_ROW'
--ORA-06550: line 6, column 12:
--PL/SQL: Statement ignored