根据提供的文件信息,本文将详细解释Oracle数据库中的表创建、序列及触发器的使用方法,特别关注于如何实现主键自增长功能。 ### Oracle 创建表示例 #### 1. 创建学生表 (Student Table) 首先来看如何创建一个学生表 `student`。在Oracle中创建表时,需要指定列的数据类型以及可能的约束条件。以下是一个简单的示例: ```sql CREATE TABLE student ( sid NUMBER(2), -- 学生ID name VARCHAR2(20), -- 姓名 age NUMBER(2), -- 年龄 sex CHAR, -- 性别 CONSTRAINT pk_id PRIMARY KEY (sid) -- 主键约束 ); ``` - **表结构**:该表包含四个字段:`sid`(学号)、`name`(姓名)、`age`(年龄)和 `sex`(性别)。 - **数据类型**: - `sid`: 使用 `NUMBER(2)` 类型存储学生的唯一标识符。 - `name`: 使用 `VARCHAR2(20)` 类型存储最长不超过20个字符的学生姓名。 - `age`: 使用 `NUMBER(2)` 类型存储学生的年龄。 - `sex`: 使用 `CHAR` 类型存储学生的性别。 - **主键约束 (`PRIMARY KEY`)**:通过 `CONSTRAINT pk_id PRIMARY KEY (sid)` 指定 `sid` 作为主键。这确保了每一行记录的唯一性,并且不允许有重复值或空值存在。 #### 2. 实现主键自增长 为了实现主键自增长,我们可以利用Oracle的序列(Sequence)和触发器(Trigger)。 ##### 创建序列 (Sequence) ```sql CREATE SEQUENCE ss START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 99999999 NOCYCLE NOCACHE NOORDER; ``` - **序列定义**:`ss` 序列从 1 开始,每次递增 1,最小值为 1,最大值为 99999999,不循环,并且没有缓存。 ##### 创建触发器 (Trigger) ```sql CREATE OR REPLACE TRIGGER ss_trigger BEFORE INSERT ON student FOR EACH ROW BEGIN SELECT ss.NEXTVAL INTO :NEW.sid FROM DUAL; END; / ``` - **触发器作用**:在向 `student` 表插入新记录前,触发器会自动为 `sid` 赋值为序列 `ss` 的下一个值。 #### 3. 创建教师表 (Teacher Table) 接着是教师表 `teacher` 的创建: ```sql CREATE TABLE teacher ( tid NUMBER(2), -- 教师ID tname VARCHAR2(20), -- 姓名 CONSTRAINT pk_id PRIMARY KEY (tid) -- 主键约束 ); ``` 教师表与学生表类似,包含 `tid` 和 `tname` 字段,并设置了主键约束。 ##### 教师表的序列和触发器 ```sql CREATE SEQUENCE ts START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 99999999 NOCYCLE NOCACHE NOORDER; CREATE OR REPLACE TRIGGER ts_trigger BEFORE INSERT ON teacher FOR EACH ROW BEGIN SELECT ts.NEXTVAL INTO :NEW.tid FROM DUAL; END; / ``` - **序列定义**:与学生表的序列相似,但这里命名为 `ts`。 - **触发器**:同样地,在向 `teacher` 表插入新记录时,触发器会自动为 `tid` 赋值为序列 `ts` 的下一个值。 #### 4. 创建课程表 (Course Table) 我们来看课程表 `course` 的创建及其关联设置: ```sql CREATE TABLE course ( cid NUMBER(2), -- 课程ID cname VARCHAR(20), -- 课程名称 tid NUMBER(2) -- 教师ID ); ALTER TABLE course ADD CONSTRAINT fk_course_teacher FOREIGN KEY (tid) REFERENCES teacher (tid); ``` - **课程表结构**:包含 `cid`(课程编号)、`cname`(课程名称)和 `tid`(教师编号)三个字段。 - **外键约束 (`FOREIGN KEY`)**:通过 `CONSTRAINT fk_course_teacher FOREIGN KEY (tid) REFERENCES teacher (tid)` 设置 `tid` 作为外键,关联到 `teacher` 表中的 `tid` 字段。这确保了每门课程的教师编号必须存在于教师表中。 ##### 课程表的序列和触发器 ```sql CREATE SEQUENCE cs START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 99999999 NOCYCLE NOCACHE NOORDER; CREATE OR REPLACE TRIGGER cs_trigger BEFORE INSERT ON course FOR EACH ROW BEGIN SELECT cs.NEXTVAL INTO :NEW.cid FROM DUAL; END; / ``` - **序列定义**:与之前两个表的序列相同,命名为 `cs`。 - **触发器**:当向 `course` 表插入新记录时,触发器会自动为 `cid` 赋值为序列 `cs` 的下一个值。 通过以上步骤,我们不仅成功创建了三个基本表,还实现了每个表主键的自增长功能,并为课程表设置了外键约束,确保了数据的一致性和完整性。这些操作对于Oracle新手来说是非常实用的,有助于快速掌握表的基本操作以及如何利用序列和触发器来简化主键的管理。






























create table student(
sid number(2),
name varchar2(20),
age number(2),
sex char,
constraint pk_id primary key(sid)
);
学生序列
create sequence ss start with 1 increment by 1 minvalue 1 maxvalue 99999999 nocycle nocache noorder;
触发器
create or replace trigger ss_trigger
before insert on student
for each row
begin
select ss.nextval into:new.sid from dual;
end;
/
――――――――――――――――――――――――――――――――――――――――――――――――――
老师表
create table teacher(
tid number(2),
tname varchar2(20),
constraint pk_id primary key(tid)
);
序列
create sequence ts start with 1 increment by 1 minvalue 1 maxvalue 99999999 nocycle nocache noorder;


- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 计算机会计理论与实务模拟题.docx
- 第13讲PC组成原理及接口技术.ppt
- 智慧城市发展中的问题及对策分析.docx
- 机械设计制造及其自动化(汽车工程方向)专业培养方案.doc
- MoldFlow软件流动分析应用.doc
- 探究性学习在中职计算机专业C语言程序设计基础课程中的应用.docx
- 计算机软件工程开发与实施教学研究.docx
- PLC在多段调速系统中的应用.doc
- (源码)基于C++的飞利浦Hue智能照明模拟系统.zip
- 新闻传播视域下大数据研究的知识图谱分析.docx
- 基于PLC的自动控制分拣系统的研究设计[].doc
- 软件项目开发计划书.doc
- 医疗器械生产质量管理规范独立软件现场检查指导原则.doc
- 单片机的电子万历设计(经典).doc
- 技术文件(综合布线).doc
- 时代光华:通信电源基础标准答案.docx


