Oracle数据库对象_约束

约束是加在表上的一种强制性的规则,是保证数据完整性的一种重要手段。

当向表中插入数据,或修改表中的数据时,必须满足约束所规定的条件。

在设计表的结构时,应该充分考虑在表上需要施加的约束。
保证数据完整性的方法大致有三种,即应用程序代码、触发器和约束。

其中约束是一种更为灵活的方式,它不仅维护更加方便,而且性能也比较高,是保证数据完整性的最佳选择。
约束可以在创建表时指定,也可以在表创建之后再指定

如果在表创建之后再指定约束,可能会因为表中已经存在一些数据不满足这个条件而使得约束无法施加。

约束的类型

在表上可以施加以下五种约束:
NOT NULL 非空约束
UNIQUE 唯一性约束
PRIMARY KEY 主键约束
FOREIFN KEY 外键约束
CHECK 检查约束
NOT NULL约束规定一个列上的值不能为空。

当使用INSERT语句向表中插入一行数据,或者使用UPDATE语句修改一行数据时,必须为该列指定值,不能使其为空。
UNIQUE约束规定一个列上的数据必须唯一,不能有重复值,但是允许为空值。

PRIMARY KEY约束是主键约束。

主键用来唯一地标识表中的一行数据,它规定在主键列上的数据不能重复,并且不能为空。
每个设计合理的表都应该有一个主键。主键可以是一个列,也可以是多个列的组合。
如果在某个列上指定了主键约束,那么就不需要在该列上再指定NOTNULL 约束和UNIQUE约束了。

在一个表上只能创建一个主键。

当创建主键时,在主键列上将自动建立一个唯一性索引,索引的名字与约束的名字相同。
FOREIFN KEY为外键约束。

外键用来与另一个表建立关联关系。

两个表之间的关联关系是通过主键和外键来维持的。
外键规定该列中的数据必须是另一个与之关联的表中的主键列中的数据。
外键可以是一个列,也可以是多个列的组合。

在一个表中只能有一个主键,但是可以有多个外键。

检查约束是一个关系表达式,它规定了一个列必须满足的条件。

注:主键约束和外键约束都会隐式的创建唯一性索引,索引名称与约束名称相同。

反之,创建唯一性索引时,也会隐式的创建唯一性约束。

如何在创建表时指定约束

如果与表同时创建,那么在创建表的CREATE语句中通过CONSTRAINT关键字指定约束的名称约束类型
同时创建表和约束的CREATE语句格式为:

CREATE TABLE 表名(
列1 数据类型CONSTRAINT 约束名1 约束类型,
列2 数据类型CONSTRAINT 约束名2 约束类型,
...

);

其中约束名是为约束指定的唯一的名称。

约束名可以由用户自己指定,也可以自动产生。

如果省略关键字CONSTRAINT和约束名称,那么约束名称将自动产生。

如果约束名称是自动产生的,那么根据这样的名称无法判断约束所在的表以及约束类型。
如果用户自己指定约束名称,则可以在名称中包含表名、约束类型等有用信息。
如果在一个列的定义之后指定该列上的约束时,这种定义约束的方法称为列级约束

约束可以在每个列的定义之后分别指定,也可以在所有列的定义之后一起指定。

如果一个约束在表定义的最后才指定,这样的约束定义方法称为表级约束
如果一个约束涉及多个列的组合,那么就不能在每个列之后指定约束,而只能定义为表级约束。
定义表级约束的CREATE语句格式为:

CREATE TABLE 表名(
列 1 数据类型,
列 2 数据类型,
··
CONSTRAINT 约束名l 约束类型(列名),
CONSTRAINT 约束名2约束类型(列名),
. . . );

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

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

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

其中约束名是为这个外键约束起的名字。

FOREIGN KEY 为约束类型,即外键约束。

REFERENCES关键字指定与哪个表的哪个列进行关联。

如果要在表级定义外键约束,那么外键的定义代码放置在所有列的定义之后,它的格式为:
CONSTRAINT 约束名 FOREIGN KEY(外键列) REFERENCES 表名(列名);

约束作为一种附加在表上的数据库对象,它的信息也被记录在数据字典中。

与约束有关的数据字典有两个,一个是user_constraints,另一个是user_cons_columns
其中在数据字典user_constraints 中记录当前用户所拥有的约束的信息,如约束名、约束类型、约束所在的表、约束的状态等。
如果是外键,还记录了与之关联的主键名称。

例如:

如果要进一步查询约束施加在哪个列上,就需要查询另一个数据字典了,它就是USER_ CONS_ COLUMNS

如何在创建表之后指定约束

时间: 2024-10-27 05:05:32

Oracle数据库对象_约束的相关文章

Oracle数据库对象_同义词

同义词是一种数据库对象,它是为一个数据库对象定义的别名,使用同义词的主要目的是为了简化SQL语句的书写. 同义词的概念和类型 利用同义词可以为用户的一个对象,或者其他用户的一个对象定义别名,从而简化命令或程序的书写,在命令或程序中可以直接使用同义词代替原来的对象. 可以为表.视图.存储程序.序列等对象建立同义词,也可以为一个同义词再建立同义词,甚至可以为一个不存在的对象建立同义词,系统仅仅在使用同义词时才验证它所代表的对象是否存在.同义词本身并不包含原对象中的数据或代码,它的作用仅仅相当于一个指

Oracle数据库对象_视图

视图是一种非常重要的数据库对象,它的形式类似于普通表,我们可以从视图中查询数据. 实际上它是建立在表上的一种虚表,在视图中并不存储真正的数据,而是仅仅保存一条SELECT语句,对视图的访问将被转化为对表的访问. 视图所基于的表称为基表,而视图可以认为是对基表的一种查询操作. 使用视图的主要目的是为了方便用户访问基表,以及保证用户对基表的安全访问. 对用户而言,往往要对一个表进行大量的查询操作,如果查询操作比较复杂,并且需要频繁地进行,那么可以为这个查询定义一个视图. 需要注意的是,在视图中并不保

Oracle数据库对象_索引

查询是在表上进行的最频繁的访问. 在查询数据时,很少有用户愿意查询表中的所有数据,除非要对整个表进行处理.一般情况下用户总是查询表中的一部分数据. 在SELECT语句中,通常需要通过WHERE子句指定查询条件,以获得满足该条件的所有数据.如果能够在很小的范围内查询需要的数据,而不是在全表范围内查询,那么将减少很多不必要的磁盘1/0 ,查询的速度无疑会大大加快.提供这种快速查询的方法就是索引. 索引的基本概念 索引是一种建立在表上的数据库对象,它主要用于加快对表的查询操作. 合理使用索引可以大大减

Oracle数据库对象_序列

序列是一种数据库对象,用来自动产生一组唯一的序号. 序列是一种共享式的对象,多个用户可以共同使用序列中的序号.一般将序列应用于表的主键列,这样当向表中插入数据时,主键列就使用了序列中的序号,从而保证主键列的值不会重复.用这种方式可以代替在应用程序中产生主键值的方法,可以获得更可靠的主键值.注:在序列指定最大值和可循环属性后,序列中的序号是可以循环使用的. 序列的创建.修改和删除 默认情况下,用户可以在自己的模式中创建序列.如果希望在其他用户的模式中创建序列,则必须具有CREATE ANY SEQ

Oracle数据库对象

Oracle数据库对象又称模式对象,它是逻辑结构的集合,其中最基本的数据库对象是表.常见的数据库对象包括同义词.序列.视图等. 1.视图 视图可以限制表中一组行为访问.隐藏了数据的复杂性.简化了用户的sql.基表定义修改隔离.通过重命名列从另一个角度提供了数据. 2.触发器(Trigger) 如果想对视图进行增删改,就可以使用触发器. 3.数据字典 oracle中分为了静态数据字典和动态数据字典. 静态数据字典: dba_*** :查看所有的用户表 all_*** :查看该用户下能看到的所有表

Oracle数据库对象查询是否被锁定及解锁

Oracle数据库对象是否被锁定查询SQL及解锁过程SQL详见下面: --查询当前用户下被锁的对象SELECT B.OBJECT_NAME, B.OWNER, C.SID,C.SERIAL#,C.OSUSER, C.MACHINE, C.TERMINAL  FROM V$LOCKED_OBJECT A, DBA_OBJECTS B, V$SESSION C WHERE A.OBJECT_ID = B.OBJECT_ID   AND A.SESSION_ID = C.SID   AND c.STA

Oracle数据库对象,同义词、序列、视图、索引

数据库对象简介 Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括: 同义词是现有对象的一个别名. 简化SQL语句 隐藏对象的名称和所有者 提供对对象的公共访问 同义词共有两种类型: CREATE USER test IDENTIFIED BY test; GRANT CONNECT , CREATE SYNONYM TO test; GRANT SELECT ON SCOTT.EMP TO test; GRANT DELETE ON S

数据库 Oracle数据库对象一

常见的数据库对象 表:基本的数据存储集合,由行和列组成 视图:从表中抽出的逻辑上相关的数据集合 序列:提供有规律的数值 索引:提高查询的效率 同义词:给对象起别名 create table语句 --create table权限 --存储空间 数据类型 varchar2(size) 可变长字符数据(默认4kb) char(size) 定长字符数据 number(p,s) 可变长数值数据 date 日期型数据 long 可变长字符数据,最大可达到2G clob 字符数据,最大可达到4G raw an

实现oracle数据库对象的一键升级

引言     公司内部的项目比较倾向于将业务逻辑放在oracle存储过程中实现,所以每次项目升级都涉及到很多的oracle表,存储过程等数据库对象的升级.然而采取的升级方式是比较"原始"的,每一个对象都是从开发库拷贝内容,再到测试库,正式库中黏贴,执行.这样的方式,工作量大而繁琐,容易出错出漏.为此,我编写了一个小程序,实现oracle对象的一键升级.下面给出主要实现逻辑. 1.获取对象的执行sql语句 利用oracle的dbms_metadata包来获取相关对象的执行语句,用orac