第9章 表和约束

来源:互联网 发布:北京周末好去处 知乎 编辑:程序博客网 时间:2024/05/20 19:48
 

Oracle数据类型\

ROWID:伪列,是表中虚拟的列,是系统自动生成的每一行记录中都包含ROWID,表示行中的唯一地址,ROWID标识了Oracle如何定位行,通过ROWID能快速定位这行记录.

创建表实例

table student(
id char(8),
name varchar2(8),
sex char(2),
weight number(2,2),
age number(2),
birthday date
)

使用子查询创建表

新表的字段列表必须与子查询中的字段列表匹配

create table stu as select id,name from student

引用另一个用户的表

select * from scott.emp;

Oracle数据库中的表分为下面两类

用户表:由用户创建和维护的表的集合,它包含用户使用的数据.

数据字典:由Oracle服务器创建和维护的表的集合,它包含数据库信息,比如表的定义\数据库结构的信息等,可以把它理解为表的表,由Oracle服务器创建和维护.如user_tables.

查询数据字典

select table_name

from user_tables

察看数据字典结构

desc user_tables

ALTER语句

添加列

alter table stu2 add(sex char(2))

添加多列

alter table stu2 add(sex char(3),age number(2))

修改列

alter table stu2 modify(sex char(1))

添加默认值

--默认值不会影响已经存在的值.

--默认值只影响新增加的字段值

alter table stu2 modify(sex default '男')

删除列

--列可以有也可以没有数据

--列被删除后,不能再恢复

--表中至少保留一列

--被外键引用的列,不能被删除

alter table stu2 drop column sex

删除表中两个字段

alter table stu2 drop (sex,age)

删除表

drop table stu2

重命名表

rename stu1 to stu2
截断表

--前提必须是表的所有者或者有delete any table系统权限来截断表

truncate table stu2

结果:清空一张表,效率高,与delete比较,它没有删除条件,而且不会触发表相关的触发器

约束

Oracle服务器用约束(Constraints)来防止无效数据输入到表中.

--表在插入,更新或者删除行的时候强制表中的数据遵循约束规则

--对于成功的操作,约束条件是必须被满足的

--如果表之间有依赖关系,使用约束可以防止表或表中相关数据的删除

约束类型

NOT Null

约束被定义在列级

id char(2) not null,

Unique约束

唯一性约束

--确保所在字段或者字段组合不出现重复值

--允许出现空值

1>id char(2) constraint stu1_id_uk unique,

2>constraint stu1_id_uk unique(id)

primary key约束

--非空且唯一

--一个表只允许一个主键

--唯一确定一个行数据的字段

--主键字段可以是单字段或者是多字段的组合

--Oracle为主键创建对应的唯一性索引

1>id char(8)constraint stu1_id_pk primary key,

2>constraint stu1_id_pk unique(id)

Foreign Key约束

外键确保了相关的两个字段的两个关系

--子表外键列的值必须在主表参照列值的范围内,强者为空

--外键参照的是一个主表的主键或者唯一键

主表被子表参照时,主表记录不允许被删除

--on delete cascade 指出当父表中的行被删除时,子表中依赖的行也将被级联删除.

--on delete set null当父表值被删除时,把涉及子表的外键值设置为空

表一级约束

constraint score_stu1_fk foreign key (sid) references stu1(id) on delete cascade,

列一级约束

定义列上

check约束

salary number(3) constraint stu1_salary_ck check(salary>0),

原创粉丝点击