Oracle数据库入门之DDL与数据库对象
2012-11-28 15:27:55 来源:WEB开发网核心提示:联合:由多个字段组合而成的主键也称联合主键,联合主键中每一个字段都不能为空联合主键字段组合的值不能出现重复,Oracle数据库入门之DDL与数据库对象(4),联合主键只能定义为表级约束create table fenshu(a number(3),b varchar2(20),c number(3),constrain
联合:由多个字段组合而成的主键也称联合主键。联合主键中每一个字段都不能为空
联合主键字段组合的值不能出现重复。联合主键只能定义为表级约束
create table fenshu(a number(3),b varchar2(20),c number(3),constraint fenshu_a_b_pk primary_key(a,b));
同样是学生分数表。其实学号和科目组合起来更应该设成主键,而不是唯一键,因为它们的值也不应该为空
外键约束(foreign key)
特点:外键用于确保相关的两个字段之间的参照关系,以实现参照完整性约束。外键参照的必须是主表的主键或者唯一键
外键约束通常构建于来自不同表的两个字段之间。子表外键列的值必须在主表参照列值的范围内,或者为空
主表的主键或唯一键被子表参照时,主表相应记录不允许被删除。
参照:所谓的参照完整性约束,比如说员工信息表和工资表,二者是通过员工编号建立连接的
这时工资表中的员工编号是受限制的,即必须是出现在员工信息表中的,这种关系称之为参照关系
举例:create table info(id number(3) primary key,name varchar2(20),job varchar2(20),birth date);
create table sal(a number(3) references info(id),b number(8,2));--将外键约束定义成字段级约束
create table sal(a number(3),b number(8,2),constraint sal_a_fk foreign key(a) references info(id));
说明:子表sal中的a字段被定义为外键,它参照的是主表info中的id字段。这里是把外键约束定义成了表级约束
执行完这两行语句之后,两个表中均没有数据。若再执行insert into sal(a,b) values(1,2);则会出现错误
因为系统并没有在子表所参照的主表中的某一条记录上找到id为1的字段的值
此时可以在刚才的插入语句之前先执行insert into info values(1,'Tom','Adv',sysdate);就不会出现错误了
如果此时再执行insert into sal(null,8);则该记录插入成功。外键毕竟不同于主键,这也不算违背参照规则
接着再执行一次insert into sal(1,8)则记录插入成功。这种插入null和重复记录的方式都是不合理的
为了实现数据的合理化,此时也可以进行其它的限制。即字段a在作为外键的同时,还可以进行主键的限制
即create table sal(a number(3) primary key references info(id),b number(8,2));
或create table sal(a number(3) primary key,b number(8,2),constraint sal_a_fk foreign key(a) references info(id));
检查约束(check)
特点:只能在字段级定义。它定义每一行(的指定字段)都必须满足的条件。以条件表达式的形式给出数据需要符合的条件
条件中不允许出现currval,nextval,level,rownum等伪列或sysdate,uid,user,userenv等函数或对其它字段值的引用
currval即序列当前的值。nextval即序列生成器的下一个序列值。level即在层次化查询的过程中标明查询的层数
sysdate即当前系统时间。uid即当前用户的id号。user即当前用户名。userenv用来查询客户端的环境,包括语言或用户名等等
举例:create table test1(name varchar2(20) check(length(name)>=6),age number(3) check(age>=0 and age<=120));
create table test1(name varchar2(20) check(name is not null),age number(3));--这就等价于非空约束了
视图(View)
概述:视图由一个或多个表(或视图)中提取数据而成。视图是一种虚拟表。视图一经创建就可以当作表来使用
使用视图可以简化复杂的数据查询。能够提高运行效率。可以屏蔽数据库表结构,实现数据逻辑独立性
还可以限制数据库访问。也可以在相同数据上提供不同的视图,便于数据共享。视图也可以有主键等等
联合主键字段组合的值不能出现重复。联合主键只能定义为表级约束
create table fenshu(a number(3),b varchar2(20),c number(3),constraint fenshu_a_b_pk primary_key(a,b));
同样是学生分数表。其实学号和科目组合起来更应该设成主键,而不是唯一键,因为它们的值也不应该为空
外键约束(foreign key)
特点:外键用于确保相关的两个字段之间的参照关系,以实现参照完整性约束。外键参照的必须是主表的主键或者唯一键
外键约束通常构建于来自不同表的两个字段之间。子表外键列的值必须在主表参照列值的范围内,或者为空
主表的主键或唯一键被子表参照时,主表相应记录不允许被删除。
参照:所谓的参照完整性约束,比如说员工信息表和工资表,二者是通过员工编号建立连接的
这时工资表中的员工编号是受限制的,即必须是出现在员工信息表中的,这种关系称之为参照关系
举例:create table info(id number(3) primary key,name varchar2(20),job varchar2(20),birth date);
create table sal(a number(3) references info(id),b number(8,2));--将外键约束定义成字段级约束
create table sal(a number(3),b number(8,2),constraint sal_a_fk foreign key(a) references info(id));
说明:子表sal中的a字段被定义为外键,它参照的是主表info中的id字段。这里是把外键约束定义成了表级约束
执行完这两行语句之后,两个表中均没有数据。若再执行insert into sal(a,b) values(1,2);则会出现错误
因为系统并没有在子表所参照的主表中的某一条记录上找到id为1的字段的值
此时可以在刚才的插入语句之前先执行insert into info values(1,'Tom','Adv',sysdate);就不会出现错误了
如果此时再执行insert into sal(null,8);则该记录插入成功。外键毕竟不同于主键,这也不算违背参照规则
接着再执行一次insert into sal(1,8)则记录插入成功。这种插入null和重复记录的方式都是不合理的
为了实现数据的合理化,此时也可以进行其它的限制。即字段a在作为外键的同时,还可以进行主键的限制
即create table sal(a number(3) primary key references info(id),b number(8,2));
或create table sal(a number(3) primary key,b number(8,2),constraint sal_a_fk foreign key(a) references info(id));
检查约束(check)
特点:只能在字段级定义。它定义每一行(的指定字段)都必须满足的条件。以条件表达式的形式给出数据需要符合的条件
条件中不允许出现currval,nextval,level,rownum等伪列或sysdate,uid,user,userenv等函数或对其它字段值的引用
currval即序列当前的值。nextval即序列生成器的下一个序列值。level即在层次化查询的过程中标明查询的层数
sysdate即当前系统时间。uid即当前用户的id号。user即当前用户名。userenv用来查询客户端的环境,包括语言或用户名等等
举例:create table test1(name varchar2(20) check(length(name)>=6),age number(3) check(age>=0 and age<=120));
create table test1(name varchar2(20) check(name is not null),age number(3));--这就等价于非空约束了
视图(View)
概述:视图由一个或多个表(或视图)中提取数据而成。视图是一种虚拟表。视图一经创建就可以当作表来使用
使用视图可以简化复杂的数据查询。能够提高运行效率。可以屏蔽数据库表结构,实现数据逻辑独立性
还可以限制数据库访问。也可以在相同数据上提供不同的视图,便于数据共享。视图也可以有主键等等
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接