第一步:创建临时的表空间
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