oracle数据库添加约束

来源:互联网 发布:易企秀场景制作源码 编辑:程序博客网 时间:2024/05/16 10:16
实验要求:创建一个学生表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(4primary key,

bname varchar(20NOT NULL,

tid number(4),

constraint book_type_setnull foreign key (tidreferences 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(4primary key,

bname varchar(20NOT NULL,

tid number(4),

constraint book_type_cascade foreign key (tidreferences 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





0 0
原创粉丝点击