您的位置:首页 > 数据库 > Oracle

oracle数据库添加约束

2015-10-21 22:52 423 查看
实验要求:创建一个学生表student,默认的表空间为users,字段自定,同时为表的各个字段分别添加合适的约束,然后测试约束的验证状态;

第一步:创建临时的表空间

create temporary tablespace user_temp

tempfile 'g:\oraclemdf\user_temp.dbf'

size 50m

autoextend on

next 50m maxsize 2048m

extent management local

第二步:创建数据表空间

create  tablespace user_data

logging

datafile 'g:\oraclemdf\user_data.dbf'

size 50m

autoextend on

next 50m maxsize 2048m

extent management local

第三步:创建学生表默认表空间

create table student

(

stu_id number(10),

stu_name varchar(20),

stu_number varchar(20),

stu_sex varchar(6)

)

tablespace user_data

第三步:为学生表添加约束
1、添加not null约束:

SQL> alter table student modify stu_name not null;

验证not null 约束:

SQL> insert into student(stu_name)values(null);

 

insert into student(stu_name)values(null)

 

ORA-01400: 无法将 NULL 插入 ("SYSTEM"."STUDENT"."STU_NAME")

SQL> insert into student(stu_name)values('高振');

 

1 row inserted

删除not null约束:

SQL> alter table student modify stu_name null;

 

Table altered
2、添加unique约束:

SQL> alter table student add unique(stu_number);

 

Table altered

 

SQL> insert into student(stu_number)values(1);

 

1 row inserted

 

SQL> insert into student(stu_number)values(1);

 

insert into student(stu_number)values(1)

 

ORA-00001: 违反唯一约束条件 (SYSTEM.SYS_C005751)

删除唯一性约束:

SQL> alter table student drop unique (stu_number);

 

Table altered
3、添加primary key约束:

SQL> alter table student add primary key (stu_id);

 

Table altered

 

SQL> insert into student(stu_id)values(null);

 

insert into student(stu_id)values(null)

 

ORA-01400: 无法将 NULL 插入 ("SYSTEM"."STUDENT"."STU_ID")

 

SQL> insert into student(stu_id)values(1);

 

1 row inserted

 

SQL> insert into student(stu_id)values(1);

 

insert into student(stu_id)values(1)

 

ORA-00001: 违反唯一约束条件 (SYSTEM.SYS_C005752)

删除primary key约束:

SQL> alter table student drop constraint sys_c005752;

 

Table altered
4、添加check约束:

SQL> alter table student add check (stu_sex in ('男','女'));

 

Table altered

 

SQL> insert into student (stu_sex)values('男');

 

1 row inserted

 

SQL> insert into student (stu_sex)values('this');

 

insert into student (stu_sex)values('this')

 

ORA-02290: 违反检查约束条件 (SYSTEM.SYS_C005753)
删除check约束:

SQL> ALTER TABLE student DROP constraint sys_c005753;

 

Table altered

 

SQL> 

5.3.6 foreign key约束

foreign key约束是指外键约束,用于引用本表或零一个表中的一列或者一组列。

foreign key约束具有如下特点:

1、被引用的列或者列应该具有主键约束或者唯一约束

2、引用列的取值只能为被引用列的值或者为null值。

3、可以为一个列或者一组列定义forign key约束。

4、引用列与被引用列可以在同一个表中,这种情况称之为自引用。

5、如果引用列存储了被引用列的某个值,则不能直接删除被引用列的值,否则与第二条矛盾。

解决方案:先删除引用列中的这个值,再删除被引用列中的值。

图书的type:

create table type(

tid number(5)primary key,
tname varchar2(10) not null
)

图书:

create table book
(
bid number(4) primary key,
bname varchar2(22),

tid number(4),

constraint book_type foreign key (tid) refernces type(tid)
)

注意:

通常将引用表称为子表,将被引用的表称之为父表。

因为在insert book时 要参照type添加  就是  添加的书的类型在type表中是存在的。

指定级联操作类型:

在添加foreign key约束时,还可以添加指定级联操作的类型,主要用于确定当删除(no delete )父表中的一条记录时,如何处理子表中的外间字段。

cascade:级联删除

no action:不让执行

举例:

创建两个表:

Create table type(

Tid number(4) primary key,

Tname varchar2(10) not null



插入数据:

insert into type values(1,'历史')

insert into type values(2,'文学')

insert into type values(3,'科技')

第一种级联操作类型:set null

创建表:book_setnull

 

create table book_setnull

(

bid number(4) primary key,

bname varchar(20) NOT NULL,

tid number(4),

constraint book_type_setnull foreign key (tid) references type (tid)

on delete set null

)

 

 

insert into book_setnull(1,'史记',1)

insert into book_setnull values(2,'三国志',1)

insert into book_setnull values(3,'西游记',2)

 

 

级联删除:

SQL> delete from type where tid=1;

 

1 row deleted

 

SQL> select * from book_setnull;

 

  BID BNAME                  TID

----- -------------------- -----

    1 史记                 

    2 三国志               

    3 西游记                   2

 

SQL> 

 

创建表:cascade

 

create table book_cascade

(

bid number(4) primary key,

bname varchar(20) NOT NULL,

tid number(4),

constraint book_type_cascade foreign key (tid) references type (tid)

on delete cascade

)

 

 

 

 

 

 

insert into book_cascade values(1,'史记',1)

insert into book_cascade values(2,'三国志',1)

insert into book_cascade values(3,'西游记',2)

 

 

删除:

SQL> delete from type where tid=1;

 

1 row deleted

 

SQL> select * from book_cascade;

 

  BID BNAME                  TID

----- -------------------- -----

    3 西游记                   2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: