`

Oracle 建表,添加主外键,序列,触发器

 
阅读更多
select * from user_objects where object_type='TABLE';
--删除contact表,包括删除与其相关的约束
drop table contact cascade constraints
--创建contact表
create table contact(
id number(6) not null primary key 
,first_name varchar2(20) not null
,last_name varchar2(20) not null
,birth_date Date
--,constraint pk_contact primary key(id) --指定主主键
);

drop sequence contact_seq;
--创建表contact的自增序列
create sequence contact_seq
 start with 1
 increment by 1
 nomaxvalue
 nocycle
 nocache

drop trigger contact_trigger
--创建表contact自增序列的触发器
create or replace trigger contact_trigger 
before insert on contact 
for each row  
begin
    select contact_seq.nextval into:new.id from sys.dual;
end;

insert into contact(first_name,last_name,birth_date) values('Clarence','Ho',to_date('1980-07-30','yyyy-mm-dd'));
insert into contact(first_name,last_name,birth_date) values('Scott','Tiger',to_date('1990-11-02','yyyy-mm-dd'));
insert into contact(first_name,last_name,birth_date) values('John','Smith',to_date('1964-02-28','yyyy-mm-dd'));

--删除contact_tel表
drop table contact_tel cascade constraints;
--创建contact_tel表
create table contact_tel(
id number(6) not null primary key
,contact_id number(6) not null
--,contact_id number not null references contact(id)
,tel_type varchar2(20) not null
,tel_number varchar2(20) not null
--,constraint pk_contact_tel primary key(id) --主键
,constraint fk_contact_tel foreign key(contact_id) references contact(id) --外键
);
drop sequence contact_tel_seq;
--创建表contact_tel的自增序列
create sequence contact_tel_seq
 increment by 1
 start with 1
 nomaxvalue
 nocycle
 nocache     
drop trigger contact_tel_trigger
--创建表contact_tel自增序列的触发器 
create or replace trigger contact_tel_trigger
before insert on contact_tel 
for each row
begin
    select contact_tel_seq.nextval into:new.id from dual;
end;

insert into contact_tel(contact_id,tel_type,tel_number) values (1,'Mobile','1234567890');
insert into contact_tel(contact_id,tel_type,tel_number) values (1,'Home','2234567890');
insert into contact_tel(contact_id,tel_type,tel_number) values (2,'Home','3234567890');

--以下测试主从表的外键约束是否生效
insert into contact_tel(contact_id,tel_type,tel_number) values (4,'Home','4234567890');

select * from contact;
select * from contact_tel;




























 
分享到:
评论

相关推荐

    数据库建表基本逻辑

    根据提供的文件内容,本文将详细解析“数据库建表基本逻辑”这一主题,涵盖表的创建、序列(sequence)的使用、触发器(trigger)的设计以及表间关系的建立等关键知识点。 ### 一、创建表的基本语法 #### 1. 表的基本...

    oracle_PLSQL_语法详细手册

    - **Table_constraint**:为表添加约束条件,包括主键 (PRIMARY KEY) 和外键 (FOREIGN KEY) 等。 - **PCTFREE**:设置在 Oracle 数据块中为数据增长预留的空间百分比,默认为 10%,即每个块有 90% 可用于数据存储,...

    Oracle数据库第4讲.pptx

    在 Oracle 数据库中,数据完整性可以通过约束、触发器和应用程序三种方法来实现,其中约束是最为常用和高效的方法。约束可以分为五种:not null、unique、primary key、foreign key 和 check。 not null 约束用于...

    oracle数据库经典题目

    INSTEAD-OF触发器主要主用于视图,其事件有INSERT、UPDATE、DELETE;系统触发器主要是DML事件和系统事件发生时调用的触发器,其中DML事件包括CREATE、DROP、ALTER等,系统事件包括LOGON、LOGOFF、STARTUP、SHUTDOWN...

    oracle考试题目.docx

    - 表(Table)、视图(View)、存储过程(Stored Procedure)、触发器(Trigger)、索引(Index)、序列(Sequence)等。 12. **SQL语句是如何分类的?** - 数据定义语言(DDL):用于创建、修改或删除数据库对象,如CREATE ...

Global site tag (gtag.js) - Google Analytics