●是否允许重复记录
❍SET 不允许记录重复
CREATE SET TABLE table1 ...
❍MULTISET 允许记录重复
CREATE MULTISET TABLE table1 ...
●数据保护
数据保护要结合FALLBACK和JOURNAL (流水或日志)。
FALLBACK是Teradata的一种数据保护机制,数据表的每一条记录都同时存放两份,而且位于不同的AMP所控制的存储单元中;当数据发生问题或者AMP失败 时,可以利用存放在其他AMP上的数据保证对数据表的访问。
-FALLBACK 使用FALLBACK保护机制
-NO FALLBACK 不使用FALLBACK保护机制
日志有BEFORE和AFTER两种,分别保存了一条记录变化前后的状态。当系统出错时,可以利用日志进行恢复。
存储空间选项
DATABLOCKSIZE用来指定数据块大小,最小的数据块为6144字节,最大的数据块是32256字节。
FREESPACE用来定义在每个磁盘柱面上保留的空间(0-75%)。
例:
CREATE MULTISET TABLE table_1
, FALLBACK, NO JOURNAL
, FREESPACE = 10 PERCENT
, DATABLOCKSIZE = 16384 BYTES
(field1 INTEGER);
字段数据类型属性。可定义如下属性:
DEFAULT 当字段无数据时用默认值来替代NULL
WITH DEFAULT 用字段的系统默认值替换NULL
FORMAT 缺省的显示格式
TITLE 缺省的列标题
NOT NULL 不允许空值
CASESPECIFIC 字母大小写敏感
UPPERCASE 字母大小写不敏感,内部用大写字母存储
例:
CREATE TABLE emp_data
(employee_number INTEGER NOT NULL
,last_name CHAR(20) NOT NULL WITH DEFAULT
,street_address VARCHAR (30) TITLE ''Address'
,city CHAR (15) DEFAULT ''Boise'
,state CHAR (2) WITH DEFAULT
,birthdate DATE FORMAT''mm/dd/yyyy'
,salary_amount DEC(10,2)
,sex CHAR (1) UPPERCASE
);
数据存储属性。包括下面各项:
COMPRESS 压缩值为NULL的字段存储空间为0
COMPRESS NULL 同上
COMPRESS <constant> 压缩值为NULL和指定值的字段存储空间为0
例:
CREATE TABLE emp_data (employee_number INTEGER
,department_number INTEGER COMPRESS
CREATE TABLE bank_account_data (customer_id INTEGER
,account_type CHAR(10) COMPRESS ''SAVINGS'
Ÿ 字段约束定义。Teradata 支持字段级约束,即限制字段的值满足某些条件,如某个字段取值是否唯一、是否为主键或外键等。对字段的约束总结如下:
CONSTRAINT name 约束名称--可选
PRIMARY KEY 非空,无重复值
UNIQUE 无重复值
CHECK <布尔条件> 指定合法值的范围
REFERENCES 与其他字段的相关性(外键)
例:
CREATE TABLE employee_badge (emp_id INTEGER NOT NULL
CONSTRAINT primary_1 PRIMARY KEY
,id_badge_number INTEGER
CONSTRAINT unique_1 UNIQUE
,salary INTEGER
CONSTRAINT check_1 CHECK (salary>0)
,job_code INTEGER
CONSTRAINT ref_1 REFERENCES job (job_code)
);
如在上面的例子中,最后一项定义了在EMPLOYEE_BADGE表中的
JOB_CODE必须和JOB表中的JOB_CODE对应,即前一个表中该字段的值必须在第二个表中有对应的项。这实际上是一种所谓的参照完整性。另外要注意的是,具有主键(Primary Key)约束的字段一定要定义为非空(NOT NULL)。
11.² 删除表
可以使用DROP TABLE语句删除表,该语句将删除表中的所有数据和在数据字典中的表结构定义。
例:
删除前面例子中创建的雇员数据表。
DROP TABLE emp_data;
删除了表emp_data中的所有数据,并删除了emp_data在数据字典中的定义。如果希望在使用这个表,必须重新创建。
例:
DELETE FROM emp_data;
或
DELETE emp_data;
删除了表emp_data中的所有数据。表定义仍然存在,可以增加数据。
11.3修改表
当一个表已经创建后,可以使用ALTER TABLE语句来修改其定义。表定义的一些属性是不可修改的(如PI),如果要改变这些属性,常用方法是建立一个满足新属性的新表,然后使用Insert-Select语句把数据从原来的表转移到新表,然后再修 改新表的名称。
ALTER TABLE完整的语法可参见Teradata SQL手册,这里通过几个例子来加以说明。
例:增加或删除字段
ALTER TABLE emp_data
ADD educ_level CHAR(1), ADD insure_type SMALLINT;
ALTER TABLE emp_data
DROP educ_level, DROP insure_type;
例:修改已有字段的属性
ALTER TABLE emp_data
ADD birthdate FORMAT 'mmmBdd,Byyyy'';
例:对没有FALLBACK的表建立FALLBACK保护
ALTER TABLE emp_data, FALLBACK;
例:同时修改表的多个属性
ALTER TABLE emp_data
, NO FALLBACK
DROP insure_type
, ADD educ_level CHAR(1);
例:修改约束定义
增加约束
ALTER TABLE emp_data ADD CONSTRAINT
CHECK (sex = 'F' OR sex = 'M');
修改约束:
ALTER TABLE emp_data
MODIFY CONSTRAINT sal_range
CHECK ( salary_amount > 0 AND salary_amount < 1000000);
注意:表中已有数据如果不符合新的约束条件,约束的增加或修改不能成
功。
删除约束:
ALTER TABLE emp_data
DROP CONSTRAINT sal_range;