理论教育 Oracle数据库约束的定义与创建方法

Oracle数据库约束的定义与创建方法

时间:2023-10-30 理论教育 版权反馈
【摘要】:在CREATE TABLE语句中可以定义列级和表级两种约束。);其中约束名是为约束指定的唯一的名称。定义表级约束的CREATE语句格式为:CREATE TABLE表名(列1数据类型,列2数据类型,…因为表级约束是在所有列之后定义的,而不是在某个具体的列之后定义,所以在表级约束中要指定相关的列名。

Oracle数据库约束的定义与创建方法

约束可以在创建表的同时指定,也可以在表创建之后再指定。如果与表同时创建,那么在创建表的CREATE语句中通过CONSTRAINT关键字指定约束的名称和约束类型。在CREATE TABLE语句中可以定义列级和表级两种约束。

(1)列级约束

列级约束是针对某一个特定列,它的定义在列的定义之后。CREATE TABLE语句中定义列级约束的语法为:

CREATE TABLE表名(

列名1数据类型CONSTRAINT约束名1约束类型,

列名2数据类型CONSTRAINT约束名2约束类型,

);

其中约束名是为约束指定的唯一的名称。约束名可以由用户自己指定,也可以自动产生。如果省略关键字CONSTRAINT和约束名称,那么约束名称将自动产生。如果约束名称是自动产生的,那么根据这样的名称无法判断约束所在的表以及约束类型。如果用户自己指定约束名称,则可以在名称中包含表名、约束类型等有用信息。

例如,下面的CREATE语句用来创建一个表orders1,并在部分列上指定约束。

在创建表orders1时指定了3个约束,第一个约束指定orderid列为主键,第二个约束指定订单编号ordernum列不为空,第三个约束指定付款方式payterms列的值只能是“在线付款”或“货到付款”,这些约束都是列级约束,并且都指定了名字。也可以简化,不指定名称,系统将自动为它们指定各自的名字,如下面的CREATE语句。

外键约束的定义形式比较复杂,因为外键要与另一个表的主键进行关联,所以不仅要指定约束的类型和有关的列,还要指定与哪个表的哪个列进行关联。

如果在列级定义外键约束,定义的格式为:

CONSTRAINT约束名FOREIGN KEY REFERENCES表名(列名);

其中,约束名是为这个外键约束起的名字。FOREIGN KEY为约束类型,即外键约束。REFERENCES关键字指定与哪个表的哪个列进行关联。定义外键约束时,如果是列级约束,则可以省略FOREIGN KEY,定义格式则简化为:

CONSTRAINT约束名REFERENCES表名(列名);

例如,在上面创建表orders2的语句中,在外键列为bookid上定义了名为fk_bookid的外键约束,它与表books的bookid列进行关联。这个外键的定义语句即为最后一行:

CONSTRAINT fk_bookid REFERENCES books(bookid)(www.daowen.com)

(2)表级约束

表级约束的定义在所有列的定义之后,用逗号(,)与列的定义分隔,独立于列的定义。定义表级约束的CREATE语句格式为:

CREATE TABLE表名(

列1数据类型,

列2数据类型,

CONSTRAINT约束名1约束类型(列名),

CONSTRAINT约束名2约束类型(列名),

);

在5种约束中,NOT NULL约束只能以列级约束的形式定义,其余4种既可以列级约束的形式定义,也可以表级约束的形式定义。因为表级约束是在所有列之后定义的,而不是在某个具体的列之后定义,所以在表级约束中要指定相关的列名。

例如,上面的创建表的CREATE语句也可以改为下面的形式:

如果外键约束定义在表级,那么外键的定义代码放置在所有列的定义之后,它的格式为:

CONSTRAINT约束名FOREIGN KEY(外键列)REFERENCES表名(列名)

例如,在表orders中的bookid列上施加的外键约束也可以通过下面的形式定义:

CONSTRAINT fk_bookid FOREIGN KEY(bookid)REFERENCES books(bookid)

如果一个约束涉及多个列的组合,那么就不能在每个列之后指定约束,而只能定义为表级约束。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈