Oracle——约束

	**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)
);
注意:

  1. 这两个列名都要用()括起来。
    COL_NAME_1:来自子表,将它指定为外键
    COL_NAME_2:来自父表,子表所引用的列
  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;

总结

  1. ORACLE可以为主键、外键、唯一、检查四种约束提供五种操作:创建、添加、删除、禁用、开启;
  2. 非空约束三种操作:创建、添加、删除;
  3. 根据创建方式的不同,约束分为内联约束和外联约束,外联约束又分为显示名称和隐式名称。以主键为例,方式一,在建表时定义列的过程中,跟在列后面指定主键,属于内联约束;方式二,建表时,在已定义完成的列下面指定主键,没用CONDTRAINT指定主键名称的,叫做外联隐式主键;方式三,建表时,在已定义完成的列下面指定主键,并用CONDTRAINT指定主键名称的,叫做外联显示主键。建议适用方式三,程序有异常时,方便定位。这些规则在其他约束中同样适用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值