表约束命令格式:
,[CONSTRAINT constraint_name] FOREIGN KEY (Column, Column, …) REFERENCES table (column, column, …)
字段约束命令格式:
[CONSTRAINT constraint_name] FOREIGN KEY table (column) 例如:
CREATE TABLE EMP (…
CONSTRAINT DEPT(DEPTNO));
5)、Check约束
CHECK约束定义了每条记录必须满足的条件
语法:
[CONSTRAINT constraint_name] CHECK (condition)
6. Alter命令
ALTER TABLE命令可用来修改数据表的定义。 命令格式:
ALTER TABLE tablename
[ADD或MODIFY或DROP options ](column_spec [column_constraint]) [ENABLE clause 或DISABLE clause]
ADD关键字可以用来给已存在的数据表增加一个字段或约束。 如:给EMP增加一个字段
增加一列(字段):alter table tablename add column_name datatype. ALTER TABLE EMP
ADD (SPOUSES_NAME CHAR(10)); Table altered。
MODIFY关键字可以用来修改已存在的数据表定义。 如:把EMP中ENAME长度改为25个字符 ALTER TABLE EMP
MODIFY (ENAM CHAR(25)); Table altered。
DROP关键字可以用来删除已存在数据表的约束。 如:把EMP中主键删除 ALTER TABLE EMP DROP PRIMARY KEY; Table altered。
7. Drop 命令
用DROP TABLE命令删除Oracle数据表的定义。 命令格式:
DROP TABLE table_name [CASCADE CONSTRAINT] 例如:
第11页
FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES
DROP TABLE EMP;
CASCADE CONSTRAINT选项说明了也把完整性约束一起删除。 注意:
? DROP TABLE也把数据表中的数据删除。 ? 数据表的VIEWS和SYNOMNYMS保留下来,但它们变成了不合法的。 ? 任何悬而未决的事务将被提交。
?
只有数据表的生成者或DBA才有权删除它。
三.上机内容
1. 创建表EMP
CREATE TABLE EMP
(EMPNO NUMBER(4) NOT NULL PRIMARY KEY, ENAME VARCHAR2(10), JOB VARCHAR2(10), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2),
DEPTNO NUMBER(2) NOT NULL); Table created.
用SQL*PLUS命令DESCRIBE来看生成的EMP表的列明细清单: 输入命令:DESCRIBE EMP
EMP生成的数据表结构显示如下: Name Null? Type EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(10) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NOT NULL NUMBER(2)
2. 从其他表中抽取字段生成数据表
CREATE TABLE EMP_PART AS
SELECT EMPNO,ENAME,JOB,SAL,COMM FROM EMP; Table Created.
输入命令:DESCRIBE EMP_PART
EMP_Part生成的数据表结构结果显示如下: Name Null? Type
EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(10) SAL NUMBER(7,2) COMM NUMBER(7,2)
3. DROP命令删除数据表
第12页
DROP TABLE EMP_PART; Table dropped.
4. 给数据表EMP增加一个字段SPOUSES_NAME
ALTER TABLE EMP
ADD (SPOUSES_NAME CHAR(10)); 输入命令:DESCRIBE EMP
EMP生成的数据表结构显示如下: Name Null? EMPNO NOT NULL ENAME JOB MGR HIREDATE SAL COMM DEPTNO NOT NULL SPOUSES_NAME
5. 用ALTER的MODIFY命令修改已存在的字段的定义
ALTER TABLE EMP
MODIFY (ENAME VARCHAR2(12));
Table Altered.
输入命令:DESCRIBE EMP
EMP生成的数据表结构显示如下: Name Null? EMPNO NOT NULL ENAME JOB MGR HIREDATE SAL COMM DEPTNO NOT NULL SPOUSES_NAME
6. 用ALTER的DROP命令删除数据表中已存在的约束
ALTER TABLE EMP DROP PRIMARY KEY;
Table Altered.
7.创建表CUSTOMER
create table customer( last_name varchar2 (30) not null, state_cd
varchar(2),
sales
number);
Table created.
8.创建表STATE
create table state(
state_cd
varchar(2) not null,
Type
NUMBER(4) VARCHAR2(10) VARCHAR2(10) NUMBER(4) DATE
NUMBER(7,2) NUMBER(7,2) NUMBER(2) CHAR(10)
Type
NUMBER(4) VARCHAR2(12) VARCHAR2(10) NUMBER(4) DATE
NUMBER(7,2) NUMBER(7,2) NUMBER(2) CHAR(10)
第13页
sate_name Table created.
varchar2(30));
四.上机作业
1.创建如下三个基表:
S (S#,SNAME,AGE,SEX) 对应的中文为: [学生 (学号,姓名,年龄,性别)]
SC (S#,C#,GRADE) 对应的中文为: [学习(学号,课程号,成绩)]
C(C#,CNAME,TEACHER) 对应的中文为: [课程(课程号,课程名,任课教师)] 注:以后的实验要用到这三个基本表。
2.生成一个数据表PROJECTS,其字段定义如下,其中PROJID是主键并且要求P_END_DATE不能比P_START_DATE早。 字段名称 数据类型 长度 PROJID NUMBER 4 P_DESC VARCHAR2 20 P_START_DATE DATE P_END_DATE DATE BUDGET_AMOUNT NUMBER 7,2 MAX_NO_STAFF NUMBER 2
3.生成一个数据表ASSIGNMENTS,其字段定义如下,其中PROJID是外键引自PROJECTS数据表,EMPNO是数据表EMP的外键,并且要求PROJID和EMPNO不能为NULL。 字段名称 数据类型 长度 PROJID NUMBER 4 EMPNO NUMBER 4 A_START_DATE DATE A_END_DATE DATE BILL_RATE NUMBER 4,2 ASSIGN_TYPE VARCHAR2 2 4.用DESCRIBE命令查看1和2题定义的字段。
5.给1题中的PROJECTS数据表增加一个COMMENTS字段,其类型为LONG。给2题中的ASSIGNMENTS数据表增加一个HOURS字段,其类型为NUMBER。
第14页
第三章 数据插入、修改和删除
一.上机目的
1.在数据表中用Insert增加记录。 2.用Update修改数据表中的数据。 3.用Delete删除表中的数据。 4.了解事务处理过程及其命令。
二.预备知识
1. Insert命令
1)用来在数据表中增加记录,格式如下:
INSERT INTO tablename [(column, column, ….)]
VALUES (value, value, ….);
命令中[(column, column, ….)]是可选的。一般情况下,为了编程的方便,最好指定字段列表。该命令每次只能增加一条记录。注意,CHARACTER和DATE必须用单引号括起来。
例如:INSERT INTO DEPT (DEPTNO,DNAME,LOC)
VALUES (50,’市场部’,’上海’);
在DEPT中增加一个新部门,忽略部门名称,这时字段列表必须指定否则出错,可用如下命令:
INSERT INTO DEPT (DEPTNO, LOC) VALUES (50,’上海’);
另外,如果部门名称不能确定,可用NULL代替,如下: INSERT INTO DEPT (DEPTNO,DNAME,LOC) VALUES (50,NULL,’上海’);
增加DATE类型的数值,常用格式是DD-MON-YY。默认的世纪是20世纪,ORCALE已克服了Y2K(千年虫)问题。 如下:
INSERT INTO EMP (EMPNO,NAM,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) VALUES (7568,’MASON’,
’ANALYST’,7566, TO_DATE(‘24/06/2084 9:30’,’DD/MM/YYYY HH:MI’), 3000,NULL,20);
2)增加从其他数据表查询出的数据
命令格式:
INSERT INTO table [(column, column, ….)] SELECT select-list
FROM table(s);
2. Update命令
在需要修改表中数据时,可使用update命令如下:
第15页