创建表
前提条件
在所属模式中创建表时,需要有CREATE TABLE权限。在其他用户的模式中创建表时,则需要有CREATE ANY TABLE数据库权限。
相关概念
创建表时使用表名(如,staffs)和一组列定义表。每个列有两个属性,列名和数据类型(如,列名STAFF_ID,指定数据类型为NUMBER(6);列名FIRST_NAME,数据类型为VARCHAR(20 BYTE)。每一列可以指定完整性约束(NOT NULL),以保证这一列的每行中必须包含一个值。
创建表之后,可以使用INSERT命令插入数据或使用数据导入导出工具装载数据,还可以直接使用CREATE TABLE AS query创建一个包含数据的表。
- 表的列和相关的数据类型。
列的数据类型决定该列包含数据值的类型。选择使用尽可能少的空间,仍能保存用户数据的数据类型。比如:使用varchar类型存储字符串,使用date或者timestamp类习惯存储日期,使用numeric类型存储数字。当使用空格填充类型的时候,增加容量使用CHAR、VARCHAR和TEXT数据类型没有性能差异。在大多数情况下使用TEXT或VARCHAR优于CHAR。
如果要连接两个表,则连接的那一列需要有相同的数据类型。表的连接通常是一个表的主键和另一个表的外键。如果数据类型不同,数据库必须将其中的一个进行转化,则会导致数据值需要比较正确性,引起不必要的开销。
- 表和列的约束。如果定义表和列的约束条件,则表和列中包含的数据就会受到限制。
- [ NOT ] NULL
是否允许该列值为空。
- UNIQUE
值唯一,允许为空,一个表可以多个列为UNIQUE。
- PRIMARY KEY
主键,设为主键的列不能为空,一个表只能建立一个主键。
- [ NOT ] NULL
普通表
在表空间human_resource中创建表staffs,其中STAFF_ID列不能为空。
CREATE TABLE hr.staffs ( staff_id NUMBER(6) NOT NULL, first_name VARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone_number VARCHAR2(20), hire_date DATE, employment_id VARCHAR2(10), salary NUMBER(8,2), commission_pct NUMBER(2,2), manager_id NUMBER(6), section_id NUMBER(4), graduated_name VARCHAR2(60) ) TABLESPACE human_resource;
临时表
GaussDB 100支持创建临时表。在处理复杂查询时,临时表用来保存一个会话或者一个事务中需要的数据。当会话退出或者用户提交和回滚事务的时候,临时表的数据自动清空,但表结构仍然存在。临时表分为会话级临时表和事务级临时表,如果创建临时表时不指定ON COMMIT { DELETE | PRESERVE } ROWS子句,默认创建事务级别临时表。
全局临时表支持创建临时索引,更新、插入和删除数据。索引中的数据与基础表中的数据具有相同的会话或事务范围。本地临时表,只支持ON COMMIT PRESERVE ROWS,表名必须以‘#’字符开头,并且设置配置项LOCAL_TEMPORARY_TABLE_ENABLED=TRUE,LOCAL_TEMPORARY_TABLE_ENABLED设置是否激活本地临时表特性。
- 会话级临时表,ON COMMIT PRESERVE ROWS
临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,自动清除临时表中数据。 表执行TRUNCATE语句清空临时表数据,但不会清空其它会话临时表中的数据。
创建会话级全局临时表staff_history_session。
CREATE GLOBAL TEMPORARY TABLE staff_history_session (startdate DATE, enddate DATE ) ON COMMIT PRESERVE ROWS;
- 事务级临时表,ON COMMIT DELETE ROWS
临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollback),自动清除临时表中数据。
创建事务级全局临时表staff_history_session。
CREATE GLOBAL TEMPORARY TABLE staff_history_session (startdate DATE, enddate DATE ) ON COMMIT DELETE ROWS;
NOLOGGING表
NOLOGGING表不记录Redo日志,日志量减少可以提高性能。但是由于没有Redo日志,数据库重启后无法重演恢复(Recover),表定义保留但是数据清空。对可靠性要求不高的非核心数据,可以使用NOLOGGING表保存。NOLOGGING表的表空间必须且仅能为NOLOGGING表空间,如果不指定则默认在TEMP2表空间。
NOLOGGING表支持以下功能:
- 表定义支持主备复制,表数据不做主备复制。
- 表定义支持备份恢复,表数据不做备份。
- 支持MVCC,支持ROLLBACK,支持普通表所支持的DDL和DML操作。
NOLOGGING表可以通过指定NOLOGGING关键字,或者指定放在NOLOGGING表空间上创建。
- 指定NOLOGGING关键字,创建表staffs_nologging。
CREATE TABLE staffs_nologging ( staff_id NUMBER(6) NOT NULL, first_name VARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone_number VARCHAR2(20), hire_date DATE, employment_id VARCHAR2(10), salary NUMBER(8,2), commission_pct NUMBER(2,2), manager_id NUMBER(6), section_id NUMBER(4), graduated_name VARCHAR2(60) )NOLOGGING;
- 指定在表空间TEMP2上创建NOLOGGING表staffs_temp2。
CREATE TABLE staffs_temp2( staff_id NUMBER(6) NOT NULL, first_name VARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone_number VARCHAR2(20), hire_date DATE, employment_id VARCHAR2(10), salary NUMBER(8,2), commission_pct NUMBER(2,2), manager_id NUMBER(6), section_id NUMBER(4), graduated_name VARCHAR2(60) ) TABLESPACE temp2;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论