索引
CREATE INDEX idx_person_nameage ON T_Person(FName,FAge)
Oracle 中的DROP INDEX语句不要求指定表名,只要指定索引名即可
DROP INDEX idx_person_name;
约束
非空约束
指定一个字段为空的方式就是在字段定义后增加 NOT NULL
惟一性约束
单字段唯一约束,复合字段唯一约束
如果希望一个字段在表中的值是唯一的,那么就可以将唯一约束设置到这个字段上,设置方式就是在字段定义后增加UNIQUE
CREATE TABLE T_Person (FNumber VARCHAR2(20) UNIQUE, FName VARCHAR2(20),FAge NUMBER (10))
复合唯一约束是建立在多个字段上的约束,被约束的字段在不能同时重复
CREATE TABLE T_Person (FNumber VARCHAR2(20), FDepartmentNumber VARCHAR(20), FName VARCHAR2(20),FAge NUMBER (10), CONSTRAINT unic_dep_num UNIQUE(FNumber,FDepartmentNumber))
有时我们需要在已经创建好的数据表上添加新的唯一约束,这时就需要使用ALTER TABLE
ALTER TABLE T_Person ADD CONSTRAINT unic_3 UNIQUE(FName, FAge)
ALTER TABLE T_Person DROP CONSTRAINT unic_1;
CHECK约束
CREATE TABLE T_Person ( FNumber VARCHAR2(20),FName VARCHAR2(20), FAge NUMBER (10) CHECK(FAge >0), FWorkYear NUMBER (10) CHECK(FWorkYear>0))
CHECK中可以用函数
CREATE TABLE T_Person ( FNumber VARCHAR2(20) CHECK (LENGTH(FNumber)>12), FName VARCHAR2(20), FAge NUMBER (10) CHECK(FAge >0), FWorkYear NUMBER (10) CHECK(FWorkYear>12))
如果希望CHECK子句中的条件语句中使用其他列,则必须在CREATE TABLe语句的末尾使用CONSTRAINT关键字定义它
CREATE TABLE T_Person ( FNumber VARCHAR2(20), FName VARCHAR2(20), FAge NUMBER (10), FWorkYear NUMBER (10) , CONSTRAINT ck_1 CHECK(FWorkYear< FAge))
主键约束
主键约束是UNIQUE约束和非空约束的组合。虽然一张表中可以有多个UNIQUE约束和非空约束,但是每个表中却只能有一个主键约束。
CREATE TABLE T_Person ( FNumber VARCHAR2(20) PRIMARY KEY, FName VARCHAR2(20),FAge NUMBER (10) )
复合主键
CREATE TABLE T_Person (FNumber VARCHAR2(20), FName VARCHAR2(20),FAge NUMBER (10) , CONSTRAINT pk_1 PRIMARY KEY(FNumber,FName))
外键约束
当一些信息在表中重复出现的时候,我们就要考虑要将它们提取到另外一张表中了,然后在源表中引用新创建的中的数据。
CREATE TABLE T_AUTHOR ( FId VARCHAR2(20) PRIMARY KEY, FName VARCHAR2(100), FAge NUMBER (10), FEmail VARCHAR2(20) ); CREATE TABLE T_Book ( FId VARCHAR2(20) PRIMARY KEY, FName VARCHAR2(100), FPageCount NUMBER (10), FAuthorId VARCHAR2(20) , FOREIGN KEY (FAuthorId) REFERENCES T_AUTHOR(FId) );