常见的SQL DDL子句
本章节描述常见的SQL DDL子句兼容项,包含分配扩展子句、约束、取消分配未使用子句、文件规范、日志记录子句、并行子句、物理属性子句、大小子句、存储子句、聚集函数嵌套、创建序列、修改序列,如表1所示。
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| 分配扩展子句 语法: ALLOCATE EXTENT [ ( { SIZE size_clause | DATAFILE 'filename' | INSTANCE integer } ... ) ] 例如:创建employees表后,改变表的分配扩展size为10M。 SQL> CREATE TABLE employees(EMPLOYEE_ID NUMBER(38), JOB_ID NUMBER(38), SALARY NUMBER(38), LAST_NAME VARCHAR2(16)); Table created. SQL> ALTER TABLE employees ALLOCATE EXTENT (SIZE 10M); Table altered. | 不支持。 | - |
| 约束 语法: { inline_constraint | out_of_line_constraint | inline_ref_constraint | out_of_line_ref_constraint } 例如:创建表staff,约束子句中指定ID列、NAME列不为空。 SQL> CREATE TABLE staff(ID INT NOT NULL, NAME char(8) NOT NULL, AGE INT, ADDRESS CHAR(50), SALARY REAL); Table created. | 支持。 | - |
| 取消分配未使用子句 语法: DEALLOCATE UNUSED [ KEEP size_clause ] 例如:创建employees表,进行了一些插入、删除操作后,希望使用取消分配未使用子句释放employees表未使用的空间。 SQL> CREATE TABLE employees(EMPLOYEE_ID NUMBER(38), JOB_ID NUMBER(38), SALARY NUMBER(38), LAST_NAME VARCHAR2(16)); Table created. - 进行一些插入、删除操作 SQL> ALTER TABLE employees DEALLOCATE UNUSED; Table altered. | 不支持。 | - |
| 文件规范 语法: {[ 'filename' | 'ASM_filename' ] [ SIZE size_clause ] [ REUSE ] [ autoextend_clause ]}
|
{[ 'filename | ASM_filename' | ('filename | ASM_filename' [, 'filename | ASM_filename' ]...) ] [ SIZE size_clause ] [ BLOCKSIZE size_clause [ REUSE ]} 例如:创建一个临时表空间tbs_temp_01,SQL语句的文件规范子句中指定在表空间中创建一个临时数据库文件temp01.dbf,可以自动扩展,并将表空间分配给表空间组tbs_grp_01。 SQL> CREATE TEMPORARY TABLESPACE tbs_temp_01 TEMPFILE 'temp01.dbf' AUTOEXTEND ON TABLESPACE GROUP tbs_grp_01; Tablespace created. | 不支持。 | - |
| 日志记录子句 语法: { LOGGING | NOLOGGING | FILESYSTEM_LIKE_LOGGING } | 部分支持,有差异。 |
|
| 并行子句 语法: { NOPARALLEL | PARALLEL [ integer ] } 例如:创建表t1,并在并行子句中指定PARALLEL 4,意为查询和更新表t1时最多使用4个并行进程操作。 SQL> CREATE TABLE t1 (id NUMBER, name VARCHAR2(50)) PARALLEL 4; Table created. | 不支持。 | - |
| 物理属性子句 语法: [ { PCTFREE integer | PCTUSED integer | INITRANS integer | storage_clause }... ] | 部分支持,有差异。 |
|
| 大小子句 语法: integer [ K | M | G | T | P | E ] 例如:创建一个临时表空间tbs_temp_01,并在表空间中创建一个临时数据库文件temp01.dbf,SQL语句的大小子句中指定初始大小是5M,可以自动扩展,并将表空间分配给表空间组tbs_grp_01。 SQL> CREATE TEMPORARY TABLESPACE tbs_temp_01 TEMPFILE 'temp01.dbf' SIZE 5M AUTOEXTEND ON TABLESPACE GROUP tbs_grp_01; Tablespace created. | 不支持。 | - |
| 存储子句 语法: STORAGE ({ INITIAL size_clause | NEXT size_clause | MINEXTENTS integer | MAXEXTENTS { integer | UNLIMITED } | maxsize_clause | PCTINCREASE integer | FREELISTS integer | FREELIST GROUPS integer | OPTIMAL [ size_clause | NULL ] | BUFFER_POOL { KEEP | RECYCLE | DEFAULT } | FLASH_CACHE { KEEP | NONE | DEFAULT } | ( CELL_FLASH_CACHE ( KEEP | NONE | DEFAULT ) ) | ENCRYPT } ... ) | 部分支持,有差异。 |
|
| 聚集函数嵌套 例如:创建由sales表的sales_amount列嵌套聚集函数MIN()、SUM()生成的表revenue。 SQL> CREATE TABLE sales(ID INT, SALES_AMOUNT INT); Table created. SQL> INSERT INTO sales VALUES(1, 100); 1 row created. SQL> INSERT INTO sales VALUES (3, 200); 1 row created. SQL> CREATE TABLE revenue as SELECT SUM(MIN(sales_amount)) as total from sales group by sales_amount; Table created. | 支持。 | - |
| 删除系统schema 语法: DROP USER schema_name CASCADE; 例如:在SYS用户下删除SYS schema。 SQL> DROP USER SYS; DROP USER SYS * ERROR at line 1: ORA-28050: specified user or role cannot be dropped | 支持。 | - |
| 删除表的主键约束 语法: DROP PRIMARY KEY [ CASCADE ] [( KEEP | DROP ) INDEX ] [ ONLINE ] | 部分支持,有差异。 |
|
| 创建序列 语法: CREATE SEQUENCE [ IF NOT EXISTS ] [ schema. ] sequence [ SHARING = { METADATA | DATA | NONE } ] [ { INCREMENT BY | START WITH } integer | { MAXVALUE integer | NOMAXVALUE } | { MINVALUE integer | NOMINVALUE } | { CYCLE | NOCYCLE } | { CACHE integer | NOCACHE } | { ORDER | NOORDER } | { KEEP | NOKEEP } | { SCALE {EXTEND | NOEXTEND} | NOSCALE } | { SHARD {EXTEND | NOEXTEND} | NOSHARD } | { SESSION | GLOBAL } ]... | 部分支持,有差异。 |
|
| 修改序列 语法: ALTER SEQUENCE [ schema. ] sequence { { (INCREMENT BY) | ( START WITH ) } integer | { MAXVALUE integer | NOMAXVALUE } | { MINVALUE integer | NOMINVALUE } | RESTART | { CYCLE | NOCYCLE } | { CACHE integer | NOCACHE } | { ORDER | NOORDER } | { KEEP | NOKEEP } | { SCALE {EXTEND | NOEXTEND} | NOSCALE } | { SHARD {EXTEND | NOEXTEND} | NOSHARD } | { SESSION | GLOBAL } } ... | 部分支持,有差异。 |
|