星辰日月00

欲多则心散,心散则志衰,志衰则思不达也!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

表是Oracle数据库中最基本的对象。对数据库的操作最终都是基于表进行的。
一、建立表
1.直接建立表
语法格式:
 

CREATE TABLE table_name(
column_name datatype [CONSTRAINT constraint_name DEFAULT default_expression...])
[TABLESPACE tablespace_name]; --默认时,建立的表存储在建表用户的默认表空间中。
数据库完整性约束条件:
RPIMARY KEY P --唯一标识表中的行。
NOT NULL C --规定某一列不允许取空值。
CHECK C --规定一列或一组列的值必须满足指定的约束条件。
UNIQUE U --指定一列或一组列不能取重复值。
FOREIGN KEY R --指定表的外键。外键引用另外一个表中的列,构成参照约束。
CREATE TABLE departments1(
departmend_id NUMBER(3),
CONSTRAINT d1-pk PRIMARY KEY,
department_name VARCHAR2(8) NOT NULL,
director_id NUMBER(5)
);
CREATE TABLE teachers1(
teacher_id NUMBER(5)
CONSTRAINT t1_pk PRIMARY KEY,
name VARCHAR2(6) NOT NULL,
job_title VARCHAR2(10),
hire_date DATE,
bonus NUMBER(4) DEFAULT 800,
wage NUMBER(5),
department_id NUMBER(3)
CONSTRAINT t1_fk_d1
REFERENCES departments1(department_id)
);
CREATE TABLE students1(
student_id NUMBER(5)
CONSTRAINT s1_pk PRIMARY KEY,
name VARCHAR2(10) NOT NULL,
sex VARCHAR2(6)
CONSTRAINT sex_chk1 CHECK(sex IN ('','')),
register_date DATE DEFAULT SYSDATE,
phone_number VARCHAR2(12) CONSTRAINT pnum_uq UNIQUE
);
2


2.间接建立表

 

语法格式:
  CREATE TABLE table_name AS subquery;
通过调整subquery可以使新建的表的结构取自原表结构的全部或部分。
CREATE TABLE teacher2 AS SELECT * FROM teachers;
CREATE TABLE students2 AS
SELECT student_id, name FROM students
WHERE specialty = '计算机';
CREATE TABLE teachers3 AS(
SELECT * FROM teachers WHERE department_id = 101
UNION
SELECT * FROM teachers WHERE department_id = 102
);
CREATE TABLE teachers4 AS(
SELECT t.teacher_id, t.name, department_name
FROM teachers t, departments d
WHERE t.department_id = d.department_id
);


二、获取表的相关信息
获得表的相关信息可以使用命令DESCRIBE,也可以通过查询数据字典中的视图user_tables和user_tab_columns。

1.获得表的基本信息
SELECT table_name, tablespace_name, temporary FROM user_tables
WHERE table_name IN(
'STUDENTS1', 'STUDENTS2','TEACHERS3','TEACHERS4'
);
2.获得表中列的信息
DESCRIBE teachers 2;
SELECT column_name, data_type, data_length, data_precision, data_scale
FROM user_tab_columns
WHERE table_name = 'TEACHER2';



三.修改表定义
修改表定义包括增、删、改表的列以及增、删表的约束,控制约束等。所有
这些修改表的操作均通过ALTER TABLE语句实现。
1.增/删/改表的列
(1)添加表的列

--语法格式:
ALTER TABLE table_name ADD column_name datatype...;

--单列
ALTER TABLE students2
ADD enrollment_grade NUMBER(3);  
ALTER TABLE students2
ADD register_date DATE DEFAULT SYSDATE;

--多列

ALTER TABLE students2

  ADD(enrollment_grade NUMBER(3);

     register_date DATE DEFAULT SYSDATE;

    );



(2)删除表的列
语法格式:

--单列
ALTER TABLE table_name DROP COLUMN column_name...;
ALTER TABLE students2
DROP COLUMN sex;

--多列

ALTER TABLE students2

  drop(sex, enrollment_grade);

 

(3)修改表的列

--语法格式:
ALTER TABLE table_name MODIFY column_name datatype...;

--单列
ALTER TABLE teacher1
MODIFY wage NUMBER(7,2);
ALTER TABLE teacher1
MODIFY name VARCHAR2(10);
ALTER TABLE teachers1
MODIFY bonus DEFAULT 1000;

--多列

alter table teacher1

  modify(wage number(7,2);

      name varchar2(10);

      bonus default 1000;

      );    

 


2.添加/删除约束
(1)添加约束

语法格式:
alter table table_name add constraint constraint_name constraint_expression;
alter table student1
add constraint s1_pk primary key(student_id);
alter table teachers1
add constraint t1_fk_d1
foreign key(department_is) references departments1(departmnet_id);
alter table students1
modify name not null;
alter table students1
add constraint sex_chk1 check(sex in('??','??'));
alter table students1
add constraint pnum_uq unique(phone_number);



(2)删除约束

--语法格式:
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
ALTER TABLE students1
DROP CONSTRAINT s1_pk;
ALTER TABLE teacher1
DROP CONSTRAINT t1_fk_d1;
ALTER TABLE students1
MODIFY name NULL;
ALTER TABLE students1
DROP CONSTRAINT sex_chk1;
ALTER TABLE students1
DROP CONSTRAINT pnum_uq;


3.允许/禁止约束
约束在建立时默认牌允许状态。可以通过使用关键字ENABLE或DISABLE指定或改变约束的允许或禁止状态。

1)禁止约束
ALTER TABLE students1
ADD CONSTRAINT pnum_uq UNIQUE(phone_number) DISABLE; --在设置时禁止约束。
ALTER TABLE students1
DISABLE CONSTRAINT sex_chk1;
2)允许约束
ALTER TABLE students1
ENABLE CONSTRAINT pnum_uq;


4.获得有关约束的信息

SELECT owner, constraint_name, constraint_type, status
FROM user_constraints
WHERE table_name = 'TEACHERS1';


四、修改表名

--语法格式:
RENAME table_oldname TO table_newname;
RENAME departments1 TO dep1;


五、删除表

TRUNCATE TABLE teachers1; --只删除表中的所有数据,不删除表的结构。
DROP TABLE teachers2; --删除表的所有数据和表的结构。

 

posted on 2012-03-10 16:48  星辰日月00  阅读(316)  评论(0编辑  收藏  举报