chapter 04_表及完整性约束_

上传人:正** 文档编号:54018615 上传时间:2018-09-07 格式:PPT 页数:53 大小:437.50KB
返回 下载 相关 举报
chapter 04_表及完整性约束__第1页
第1页 / 共53页
chapter 04_表及完整性约束__第2页
第2页 / 共53页
chapter 04_表及完整性约束__第3页
第3页 / 共53页
chapter 04_表及完整性约束__第4页
第4页 / 共53页
chapter 04_表及完整性约束__第5页
第5页 / 共53页
点击查看更多>>
资源描述

《chapter 04_表及完整性约束_》由会员分享,可在线阅读,更多相关《chapter 04_表及完整性约束_(53页珍藏版)》请在金锄头文库上搜索。

1、表、完整性约束,本章要点,管理表完整性约束的使用,数据库对象的命名规则,必须以字母开头 可包括数字和三个特殊字符(# _ $) 不要使用oracle的保留字 同一用户下的对象不能同名,数据类型,数据类型 说明 varchar2(size) 可变长字符串,最大4000字符 char(size) 定长字符串,最大2000字符 number(p,s) 数字值,可以表示整数,也可表示小数,p表有效数位数 date 日期值 alter session set nls_date_format=yyyy-mm-dd; (修改默认日期格式),建表的语句,为了创建表,你必须具有: 创建表的权限 足够的存储区域

2、标准的建表语法: CREATE TABLE schema.table(column datatype DEFAULT expr , );select * from session_privs,如何判断一个用户有没有创建表的权限?,CREATE TABLE 表名称(字段名称1 字段类型 DEFAULT 默认值,字段名称1 字段类型 DEFAULT 默认值,字段名称n 字段类型 DEFAULT 默认值 ),例:创建一张 person 表,表中的字段类型如下所示:,create table person(pid varchar2(18) ,name varchar2(200) ,age number

3、(3) ,birthday date ,sex varchar2(2) default 男 );,例:向表中增加数据insert into person(pid,name,age,birthday,sex) VALUES(11111111111111111,张三,30,TO_DATE(1976-02-13,yyyy-mm-dd),女) ;insert into person(pid,name,age,birthday) VALUES(22222222222222222,李四,31,TO_DATE(1986-02-13,yyyy-mm-dd) ;insert into person(pid,na

4、me,age,birthday,sex) VALUES(33333333333333333,王五,32,TO_DATE(1977-08-20,yyyy-mm-dd),女) ;insert into person(pid,name,age,birthday) VALUES(44444444444444444,钱七,33,TO_DATE(1986-02-13,yyyy-mm-dd) ;,使用子查询创建表,使用子查询创建表的语法 CREATE TABLE tablecolumn(, column.) AS subquery; 新表的字段列表必须与子查询中的字段列表匹配 字段列表可以省略,示例 cre

5、ate table emp_copy as select * from emp where 1=2 create table emp_copy as select * from emp,提问:比较这两条语句有什么区别?,例:为person表增加一列address,脚本如下: 方法一: 先删除表:drop table person; 再创建表:create table person(pid varchar2(18) ,name varchar2 (200) ,age number(3) ,birthday date ,sex varchar2 (2) default 男,address varc

6、har2 (200);,ALTER TABLE 语句,方法二: 使用alter table 语句可以: 增加字段 修改字段 删除字段ALTER TABLE table ADD (column datatype DEFAULT expr, column datatype.);ALTER TABLE table MODIFY (column datatype DEFAULT expr, column datatype.);ALTER TABLE table DROP (columns);,在表中增加字段,使用 ADD 子句增加字段,新的字段只能被加到整个表的最后。 语法: ALTER TABLE

7、表名称 ADD (列的名称 列的类型 DEFAULT 默认值 , 列的名称 列的类型 DEFAULT 默认值,); 例:为 person 表中增加 address 列alter table person add address varchar2 (200) default 暂无地址;,修改字段,可修改列的数据类型,大小和默认值 修改表结构的语法:ALTER TABLE 表名称 MODIFY (列的名称 列的类型 DEFAULT 默认值) 例:修改 person 表中的 name 列,加入默认值,修改大小ALTER TABLE person MODIFY name VARCHAR2(20) DE

8、FAULT 无名氏; 不是任何情况都可以修改的,当字段只包含空值时,类型、大小都可以修改; 在修改表结构的时候,如果假设数据库中对应的字段里有一个很长的数据,则无法将表的长度缩小,例如:现在在 name 字段中存在一个长度为 20 个字符的字母,原本的 name 可以容纳 200 个内容,但是此时要将 name 字段的长度修改为 10,则肯定无法实现。,建议:在一般的数据库程序开发中,很少去修改表结构,这一点在IBM DB2数据库中就没有提供ALERT TABLE命令,所以在建表的时候一般要考虑到位,一般都是事先为各类型字段建立几个备用字段,这些备用字段默认值都是允许为空,以便在不使用这些备用

9、字段时出现错误。,删除字段,可以从表中删除列:ALTER TABLE employeesDROP COLUMN sex; 从每行中删除掉字段占据的长度和数据,释放在数据块中占用的空间。 删除大表中的字段将需要比较长的时间。,删除表的内容,TRUNCATE TABLE 语句 清除表中所有的记录 是DDL语句,不可以回滚 释放表的存储空间 是删除数据的方法之一 TRUNCATE TABLE table_name;,删除表,表中所有数据将被删除 没有完成的事务被提交 所有相关的索引被删除 不能回退 语法: DROP TABLE table_name;,改变对象名称,使用RENAME语句改变对象名称,

10、可以修改表、视图、序列或者同义词的名称 RENAME old_name TO new_name; 必须是对象的所有者,数据完整性,分类: 域完整性;(控制一列的约束条件) 实现CHECK 实体完整性;(一行有唯一标识) PRIMARY KEY 参照完整性。(主表和从表的数据一致性) FOREIGN KEY,什么是约束,约束是在表上强制执行的数据校验规则. 当表中数据有相互依赖性时,可以保护相关的数据不被删除. Oracle 支持下面五类完整性约束: NOT NULL 非空 UNIQUE KEY 唯一键 PRIMARY KEY 主键 FOREIGN KEY 外键 CHECK 检查,约束概述,Or

11、acle使用SYS_Cxxx格式命名约束,也可以由用户命名 创建约束的时机: 在建表的同时创建(首选) 建表后创建 可定义列级或表级约束 有单列约束和多列约束,主键约束( PRIMARY KEY),主键从功能上看相当于非空且唯一一个表中只允许一个主键主键是表中能够唯一确定一个行数据的字段主键字段可以是单字段或者是多字段的组合Oracle为主键创建对应的唯一性索引,创建表时创建约束,CREATE TABLE schema.table(column datatype DEFAULT exprcolumn_constraint,table_constraint);CREATE TABLE emp(e

12、mp_id NUMBER(3),name VARCHAR2(16),dept_id NUMBER(4) NOT NULL,CONSTRAINT emp_empid_pk PRIMARY KEY (emp_id);,主键约束( PRIMARY KEY),CREATE TABLE departments(department_id NUMBER(4),department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL,manager_id NUMBER(6),location_id NUMBER(4),CONSTRAINT dept_id_p

13、k PRIMARY KEY(department_id) );,例:建立 person 表,在 pid 上增加主键约束 CREATE TABLE person(pid VARCHAR2(18) PRIMARY KEY,name VARCHAR2(200) ,age NUMBER(3) ,birthday DATE ,sex VARCHAR2(2) DEFAULT 男 ); 例:插入数据,其中插入的主键重复和为空,执行范例后,会给出错误的提示信息,但是这些约束属于系统自动分配好的约束名称,也可以通过使用CONSTRAINT指定一个约束的名字。 例:将person表中的pid指定为主键,并指定主键

14、名称 CREATE TABLE person(pid VARCHAR2(18) ,name VARCHAR2(200) ,age NUMBER(3) ,birthday DATE ,sex VARCHAR2(2) DEFAULT 男 ,CONSTRAINT person_pid_pk PRIMARY KEY(pid) );,CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25) NOT NULL,email VARCHAR2(25),salary NUMBER(8,2),commission_pct NUMBER(

15、2,2),hire_date DATE NOT NULL,department_id NUMBER(4),CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)REFERENCES departments(department_id),CONSTRAINT emp_email_uk UNIQUE(email);,外键约束( FOREIGN KEY),例:要求完成一个程序,一本书要属于一个人 书本身应该是一张表,一个书中必然有一个字段表示属于那个人的。DROP TABLE person ;DROP TABLE book ; CREATE TABLE person(pid VARCHAR2(18) ,name VARCHAR2(200) ,age NUMBER(3) ,birthday DATE,sex VARCHAR2(2) ,CONSTRAINT person_pid_pk PRIMARY KEY(pid) ,CONSTRAINT person_name_uk UNIQUE(name) ,CONSTRAINT person_age_ck CHECK(age BETWEEN 0 AND 150) ,CONSTRAINT person_sex_ck CHECK(sex IN (男,女,中) );,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号