**Oracle中常见的约束一共有五种:主键(Primary Key),外键(Foreign Key),非空(Not Null),唯一(Unique),检查(Check)。**
主键(Primary Key)
介绍
主键,标识表中某条(行)记录是唯一的,管理同一张表中行与行之间的关系。可以指定该行中的一列或者多列。指定一列,该列的值在整张表中必须唯一的,指定多列(这种的叫联合主键),这些列的组合在表中必须是唯一的,不过单独来看这些列可以是重复的。
主键要遵守以下规则:不能为null值或者是空字符串;一旦标识为主键,不要随意修改,建议以没有实际意义的列作为主键;主键是可选的,最好为每张表都指定一个主键。
它保证数据实体完整性。
创建
方式一:
CREATE TABLE TABLE_NAME(
COL_NAME DATA_TYPE PRIMARY KEY,
…
);
方式二:
CREATE TABLE TABLE_NAME(
…
PRIMARY KEY(COL_NAME)
);
方式三:
CREATE TABLE TABLE_NAME(
…
CONSTRAINT PK_NAME PRIMARY KEY(COL_NAME)
);
添加
ALTER TABLE TABLE_NAME ADD CONSTRINT PK_NAME PRIMARY KEY(COL_NAME);
删除
ALTER TABLE TABLE_NAME DROP CONSTRAINT PK_NAME;
禁用
方式一:
ALTER TABLE TABLE_NAME DISABLE CONSTRAINT PK_NAME;
方式二:
ALTER TABLE TABLE_NAME DISABLE PRIMARY KEY;
开启
方式一:
ALTER TABLE TABLE_NAME ENABLE CONSTRAINT PK_NAME;
方式二:
ALTER TABLE TABLE_NAME ENABLE PRIMARY KEY;
外键(Foreign Key)
介绍
外键,建立表与表之间的关系。表现为一个表中某列的值,引用了另一个表中某列的值。引用的表称为子表,被引用的表称为主表。主表中被引用的列增加、修改、删除,子表中的外键列的值都会同步。
它保证数据引用完整性。
创建
方式一:
CREATE TABLE TABLE_NAME(
…
FOREIGN KEY(COL_NAME_1) REFERENCES PARENT_TABLE_NAME(COL_NAME_2)
);
方式二:
CREATE TABLE TABLE_NAME(
…
CONSTRAINT FK_NEM FOREIGN KEY(COL_NAME_1) REFERENCES PARENT_TABLE_NAME(COL_NAME_2)
);
注意:
- 这两个列名都要用()括起来。
COL_NAME_1:来自子表,将它指定为外键
COL_NAME_2:来自父表,子表所引用的列 - 当主表中被引用的行删除时,子表的外键列要用ON DELETE来指定结果。ON DELETE 有两种属性:
ON DELETE CASCADE:当主表中被引用的行删除时,子表中所有引用该行的行都同步删除;
比如:
CREATE TABLE TABLE_NAME(
…
CONSTRAINT FK_NEM FOREIGN KEY(COL_NAME_1)
REFERENCES PARENT_TABLE_NAME(COL_NAME_2)
ON DELETE CASCADE
);
ON DELETE SET NULL:当主表中被引用的行删除时,子表中所有引用该行的行都赋成NULL;
比如:
CREATE TABLE TABLE_NAME(
…
CONSTRAINT FK_NEM FOREIGN KEY(COL_NAME_1)
REFERENCES PARENT_TABLE_NAME(COL_NAME_2)
ON DELETE SET NULL
);
如果使用ON DELETE SET NULL,外键列不能使用NOT NULL约束,否则执行报错。
添加
ALTER TABLE TABLE_NAME ADD CONSTRAINT FK_NAME FOREIGN KEY(COL_NAME_1) REFERENCES PARENT_TABLE_NAME(COL_NAME_2);
删除
ALTER TABLE TABLE_NAME DROP CONSTRAINT FK_NAME;
禁用
ALTER TABLE TABLE_NAME DISABLE CONSTRAINT FK_NAME;
开启
ALTER TABLE TABLE_NAME ENABLE CONSTRAINT FK_NAME;
非空(Not Null)
介绍
非空,强制标识了非空的列不接受null值。
它保证数据实体完整性。
创建
CREATE TABLE TABLE_NAME(
COL_NANE DATA_TYPE NOT NULL
…
);
添加
ALTER TABLE TABLE_NAME MODIFY(COL_NAME NOT NULL);
删除
ALTER TABLE TABLE_NAME MODIFY(COL_NAME NULL);
唯一(Unique)
介绍
唯一,通常将不受主键约束的列标上唯一约束,确保列的值在表中的行之间为唯一,可以指定一列,也能指定多列。
使用唯一约束要遵循以下原则:一个表中可以指定多个唯一约束;允许null值;可以随意更改。
创建
方式一:
CREATE TABLE TABLE_NEMA(
…
COL_NAME DATA_TYPE UNIQUE,
);
方式二:
CREATE TABLE TABLE_NAME(
…
UNIQUE(COL_NAME)
);
方式三:
CREATE TABLE TABLE_NAME(
…
CONSTRAINT UNIQUE_NAME UNIQUE(COL_NAME)
);
方式四:
CREATE TABLE TABLE_NAME(
…
COL_NAME DATA_TYPE CONSTRAINT UNIQUE_NAME UNIQUE;
);
添加
ALTER TABLE TABLE_NAME ADD CONSTRAINT UNIQUE_NAME UNIQUE(COL_NAME);
删除
ALTER TABLE TABLE_NAME DROP CONSTRAINT UNIQUE_NAME;
禁用
ALTER TABLE TABLE_NAME DISABLE CONSTRAINT UNIQUE_NAME;
开启
ALTER TABLE TABLE_NAME ENABLE CONSTRAINT UNIQUE_NAME;
检查(Check)
介绍
检查,限制一列或多列的所能接受的值。
格式:CHECK(EXPRESSION),EXPRESSION必须是一个布尔表达式,如果要对数据进行更新或插入,EXPRESSION返回TRUE,才会执行;如果返回FALSE,则不会执行。
它保证了数据的域完整性,比如表A,ID NUMBER(10),那么ID这一列最多只能存储数值10位。
它同时还是一个自定义完整性约束,比如表A,AGE NUMBER CHECK(AGE > 0 ),那么这一列只能接受0以上的值。
创建
方式一:
CREATE TABLE TABLE_NAME(
…
COL_NAME DATA_TYPE CHECK(EXPRESSION),
);
方式二:
CREATE TABLE TABLE_NAME(
…
CONSTRAINT CHECK_NAME CHECK(EXPRESSION)
);
添加
ALTER TABLE TABLE_NAME CONSTRAINT CHEXK_NAME CHECK(EXPRESSION);
删除
ALTER TABLE TABLE_NAME DROP CONSTRAINT CHECK_NAME;
禁用
ALTER TABLE TABLE_NAME DISABLE CONSTRAINT CHECK_NAME;
开启
ALTER TABLE TABLE_NAME ENABLE CONSTRAINT CHECK_NAME;
总结
- ORACLE可以为主键、外键、唯一、检查四种约束提供五种操作:创建、添加、删除、禁用、开启;
- 非空约束三种操作:创建、添加、删除;
- 根据创建方式的不同,约束分为内联约束和外联约束,外联约束又分为显示名称和隐式名称。以主键为例,方式一,在建表时定义列的过程中,跟在列后面指定主键,属于内联约束;方式二,建表时,在已定义完成的列下面指定主键,没用CONDTRAINT指定主键名称的,叫做外联隐式主键;方式三,建表时,在已定义完成的列下面指定主键,并用CONDTRAINT指定主键名称的,叫做外联显示主键。建议适用方式三,程序有异常时,方便定位。这些规则在其他约束中同样适用。