资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Copyright Oracle Corporation,2001.All rights reserved.,表和约束,表和约束,本章要点,创建表,修改表,删除表,重命名,截断表,数据完整性约束,本章要点创建表,创建表,Oracle,中数据库对象命名原则,必须由字母开始,长度在,130,个字符之间。,名字中只能包含,AZ,az,09,_(,下划线,),,,$,和,#,。,同一个,Oracle,服务器用户所拥有的对象名字不能重复。,名字不能为,Oracle,的保留字。,名字是大小写不敏感,创建表Oracle中数据库对象命名原则,CREATE TABLE,语句,必须有:,CREATE TABLE,权限,指定:,表名,列名、列数据类型和列的大小,CREATE TABLE,schema,.,table,(,column,datatype,DEFAULT,expr,.);,CREATE TABLE语句必须有:CREATE TABL,创建表,DESCRIBE dept,CREATE TABLE DOSSIER,(ID NUMBER(4),CNAME VARCHAR2(20),BIRTHDAY DATE,STATURE NUMBER(3),WEIGHT NUMBER(5,2),COUNTRY_CODE CHAR(2)DEFAULT 01);,创建表 DESCRIBE deptCREATE TABLE,默认值应用,插入默认值,insert into dossier,(ID,CNAME,BIRTHDAY,STATURE,WEIGHT),values(2,姚明,to_date(1980.9.12,yyyy.mm.dd),226,134);,已创建,1,行。,使用默认值修改,update dossier set country_code=default where id=2;,默认值应用插入默认值insert into dossie,使用子查询创建表,使用子查询创建表的语法,CREATE TABLE,table,(,column,column,.),AS,subquery;,新表的字段列表必须与子查询中的字段列表匹配,字段列表可以省略,使用子查询创建表使用子查询创建表的语法CREATE TA,引用另一个用户的表,SELECT*FROM scott.emp;,如果一个表不属于当前用户,如果引用它,必须把方案名放在表名的前面。例如,,scott.emp,引用另一个用户的表SELECT*FROM scott.e,Oracle,中表的分类,Oracle,数据库中的表分为下面两类:,用户表:由用户创建和维护的表的集合,它包含用户所使用的数据。,数据字典:由,Oracle,服务器创建和维护的表的集合,它包含数据库信息,比如是表的定义,数据库结构的信息等,可以把它理解为表的表,由,Oracle,服务器创建和维护。如,user_tables,。,Oracle中表的分类Oracle 数据库中的表分为下面,使用数据字典,查询数据字典,SELECT table_name,FROM user_tables;,察看数据字典结构,DESC user_tables;,使用数据字典查询数据字典SELECT table_n,数据类型,Data TypeDescription,VARCHAR2(,size,),可变长度的字符数据,CHAR(,size,),固定长度的字符数据,NUMBER(,p,s),数字数据,DATE,日期和时间值,LONG,最大,2G,的可变长度字符数据,CLOB,最大,4G,的字符数据,RAW and LONG RAW,原始二进制数据,BLOB,最大,4G,的二进制数据,BFILE,最大,4G,的,存储在外部文件中的二进制数据,ROWID,一个,64,进制的数制系统,表示表中一行的唯,一地址,数据类型Data TypeDescription,ALTERTABLE,语句,用,ALTERTABLE,语句来:,添加一个新列,修改一个已存在的列,为新列定义一个默认值,删除一个列,ALTERTABLE语句用ALTERTABLE语句来:,ALTERTABLE,语句,用,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 (,column,);,ALTERTABLE语句用ALTER TABLE语句添加、修,添加列,DEPT80,“添加一个新列到,DEPT80,表”,DEPT80,New column,添加列DEPT80“添加一个新列到DEPT80表”DEPT8,添加新列,用,ADD,字句添加列,新列成为最后的列,ALTER TABLE dept80,ADD (job_id VARCHAR2(9);,Table altered.,添加新列用ADD字句添加列ALTER TABLE dept,修改列,可以改变列的数据类型、大小和默认值,对默认值的改变只影响后来插入表中的数据,ALTER TABLEdept80,MODIFY(last_name VARCHAR2(30);,Table altered.,修改列可以改变列的数据类型、大小和默认值ALTER TAB,删除列,用,DROP COLUMN,子句从表中删除列,ALTER TABLE dept80,DROP COLUMN job_id;,Table altered.,删除列用DROP COLUMN子句从表中删除列ALTER T,删除表,在表中的所有数据和结构都被删除,任何未决的事务都被提交,所有的索引被删除,你不能回退,DROP TABLE,语句,DROP TABLE dept80;,Table dropped.,删除表在表中的所有数据和结构都被删除DROP TABLE,改变一个对象的名字,执行,RENAME,语句,改变一个表、视图、序列或同义词,You must be the owner of the object.,RENAME dept TO detail_dept;,Table renamed.,改变一个对象的名字执行RENAME语句,改变一个表、视图、,截断表,TRUNCATE TABLE,语句:,删除表中所有的行,释放该表所使用的存储空间,不能回退用,TRUNCATE,删除的行,作为选择,可以用,DELETE,语句删除行,TRUNCATE TABLE detail_dept;,Table truncated.,截断表TRUNCATE TABLE语句:TRUNCATE,添加注释到表中,用,COMMENT,语句添加注释到一个表或列中,注释能够通过数据字典视图查看:,ALL_COL_COMMENTS,USER_COL_COMMENTS,ALL_TAB_COMMENTS,USER_TAB_COMMENTS,COMMENT ON TABLE employees,IS Employee Information;,Comment created.,添加注释到表中用COMMENT语句添加注释到一个表或列中C,Oracle,中约束类型,约束强制规则在表级,如果有从属关系,约束防止表的删除,下面的约束类型是有效的:,NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY,CHECK,Oracle中约束类型约束强制规则在表级,约束原则,命名一个约束,或者由,Oracle,用,SYS_C,n,格式产生一个名字,创建一个约束:,在创建表的同时,或者,在创建表之后,在列或者表级定义一个约束,在数据字典中查看约束,约束原则命名一个约束,或者由Oracle 用SYS_Cn格,定义约束,CREATE TABLE,schema,.,table,(,column,datatype,DEFAULT,expr,column_constraint,.,table_constraint,.);,CREATE TABLE employees(,employee_id NUMBER(6),first_name VARCHAR2(20),.,job_id VARCHAR2(10)NOT NULL,CONSTRAINT emp_emp_id_pk,PRIMARY KEY(EMPLOYEE_ID);,定义约束CREATE TABLE schema.tabl,定义约束,列级约束,表级约束,column,CONSTRAINT,constraint_name,constraint_type,column,.,CONSTRAINT,constraint_name,constraint_type,(,column,.),定义约束列级约束column CONSTRAINT c,NOTNULL,约束,确保某些列不允许空值:,NOT NULL,约束,(,对于该列来说没有行能够包含一个空值,),缺少,NOT NULL,约束,(,对于该列来说任何行都能包含空值,),NOT NULL,约束,NOTNULL约束确保某些列不允许空值:NOT NULL约束,CREATE TABLE employees(,employee_id NUMBER(6),last_name VARCHAR2(25)NOT NULL,salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE,CONSTRAINT emp_hire_date_nn,NOT NULL,.,NOTNULL,约束,定义在列级:,由系统指定约束名字,用户指定约束名字,CREATE TABLE employees(NOTNULL,UNIQUE,约束,EMPLOYEES,UNIQUE,约束,INSERT INTO,不被允许:已经存在,允许,UNIQUE约束EMPLOYEES UNIQUE约束INSE,UNIQUE,约束,既可以定义在表级也可以定义在列级:,CREATE TABLE employees(,employee_id NUMBER(6),last_name VARCHAR2(25)NOT NULL,email VARCHAR2(25),salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE NOT NULL,.,CONSTRAINT emp_email_uk UNIQUE(email);,UNIQUE约束既可以定义在表级也可以定义在列级:CREAT,PRIMARYKEY,约束,DEPARTMENTS,PRIMARY KEY,INSERT INTO,不允许,(,空值,),不允许,(50,已经存在,),PRIMARYKEY约束DEPARTMENTS PRIMAR,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_pk PRIMARY KEY(department_id);,PRIMARYKEY,约束,既可以定义在表级也可以定义在列级:,CREATE TABLE departments(PRI,FOREIGNKEY,约束,DEPART
展开阅读全文