您的位置:首页 > 其它

主键约束、外键约束、唯一约束、检查约束、默认值约束实例

2012-08-06 17:31 375 查看
http://xinxinyin666.i.sohu.com/blog/view/226237927.htm

主键(primary key)约束、外键(foreign key)约束、唯一(unique)约束、检查(check)约束、默认值(default)约束实例

Oracle 有如下类型的约束:

NOT NULL(非空)、UNIQUE Key(唯一约束)、PRIMARY KEY(主键约束)、FOREIGN KEY(外键约束)、CHECK约束

Oracle使用SYS_Cn格式命名约束.

创建约束:在建表的同时创建、建表后创建

约束的类型有如下几种:

C (check constraint on a table)

P (primary key)

U (unique key)

R (Referential AKA Foreign Key)

V (with check option, on a view)

O (with read only, on a view)

1、创建约束

CREATE TABLE students(

student_id VARCHAR2(10) NOT NULL,

student_name VARCHAR2(30) NOT NULL,

college_major VARCHAR2(15) NOT NULL,

status VARCHAR2(20) NOT NULL,

state VARCHAR2(2),

license_no VARCHAR2(30)

) TABLESPACE student_data;

2、创建主键:

ALTER TABLE students ADD CONSTRAINT pk_students PRIMARY KEY (student_id)

USING INDEX TABLESPACE student_index;

Alter table table_name add constrants BID primary key (bookno);

ALERT TABLE table_name MODIFY( column1 PRIMARY KEY);

3、创建Unique约束:

ALTER TABLE students ADD CONSTRAINT uk_students_license UNIQUE (state, license_no)

USING INDEX TABLESPACE student_index;

4、创建Check约束:定义每一记录都要满足的条件,条件表达式不允许有:CURRVAL, NEXTVAL, LEVEL, ROWNUM,SYSDATE, UID, USER, USERENV 函数:

ALTER TABLE students ADD CONSTRAINT ck_students_st_lic CHECK ((state IS NULL AND license_no IS NULL) OR (state IS NOT NULL AND license_no is NOT NULL));

添加check约束(check_1为约束名,dept_salary为字段名 )     

alter table emp add constraint check_1 check(dept_salary>0);      

5、创建外键约束:

ALTER TABLE students ADD CONSTRAINT fk_students_state FOREIGN KEY (state) REFERENCES state_lookup (state);

6. 创建不能为空约束 not null

alter table table_name modify(name not null);

alter table table_name modify name1 varchar2(20) not null;

实例1:

首先创建学生信息表studentinfo和学生成绩表testinfo。

--学生信息表

CREATE TABLE studentInfo (

stuNo CHAR(10) NOT NULL ,

stuName VARCHAR2(20) NOT NULL,

stuSex NUMBER(1),

stuBirthday DATE DEFAULT SYSDATE ,

stuAddress VARCHAR2(20)

);

--学生成绩表

CREATE TABLE testInfo (

stuNo CHAR(10) NOT NULL ,

classNo CHAR(5) NOT NULL,

testScore NUMBER(3,1)

);

--约束条件:设置主键

alter table testinfo add constraint fk_1 foreign key (stuno) references studentinfo(stuno);

--约束条件:设置外键

alter table studentinfo add constraint pk_1 primary key (stuno);

--约束条件:设置唯一

alter table testinfo add constraint uniq_1 unique (stuno,classno);

主键、外键、唯一约束、check约束、非空约束等约束详解实例:

1、--创建表

create table tb_Dept

(

Deptid char(2) Primary key,

DeptName char(16) Not Null

)

2、--外键约束

create table tb_Student

(

Studid char(10) Primary key,

Studname char(8) Not null,

Deptid char(2) Not null,

Constraint FK_DeptID Foreign Key (Deptid)

References Tb_Dept(DeptID)

)

3、--外键约束简化形式,必须要求tb_Dept表中DeptID为主键,且数值类型相同

create table Tb_Student

(

StudId char(10) Primary key,

StudName char(8) Not null,

DeptID char(2) not null References Tb_Dept

)

4、--创建表,无主键

create table Tb_Class

(

ClassID char(8) not null,

ClassName varchar(30) not null,

DeptId char(2) not null,

ClassStuNumber int

)

5、--创建表,同时定义主键

create table Tb_Class

(

classid char(8) not null,

ClassName varchar(30) not null,

DeptID char(2) not null,

ClassStuNumber int

constraint PK_ClassID Primary key

(ClassID,ClassName)

)

6、--新增主键

Alter table Tb_class ADD Constraint PK_ClassID primary key(Classid)

7、--删除主键

Alter table tb_Class Delete Constraint PK_ClassID Primary key(ClassID)

8、--外键级联更新,删除,简化形式

Create table tb_student

(

studID char(10) Primary key,

StudName char(10) not null,

DeptID char(2) not null References tb_Dept

On Update cascade

on delete cascade

)

9、--外键级联更新,删除,标准

create table tb_student

(

studid char(10) Primary key,

StudName char(8) not null,

DeptID char(2) not null,

Constraint FK_Deptid foreign key(DeptID)

References Tb_Dept(DeptID)

on update Cascade

on delete cascade

)

10、--创建无外键的表

create table tb_student

(

studId char(10) Primary key,

StudName char(8) not null,

DeptID char(2) not Null

)

11、--给相应的列(DeptID)添加外键约束

Alter table tb_Student ADD Constraint FK_DeptID Foreign key(DeptID) References tb_Dept(DeptID)

12、--删除外键约束

Alter table tb_Student Drop Constraint fk_DeptID

13、--创建表是创建Unique约束

Create table tb_Student

(

studId char(10) Primary key,

Studname char(8) not null Unique nonclustered,

DeptID char(2) not null references Tb_Dept

)

create table tb_student

(

studID char(10) Primary key,

Studname char(8) not null,

deptid char(2) not null references tb_dept,

constraint Uk_Stuname Unique(Stuname)

)

14、--创建表结束后,添加、删除Unique约束

--添加Unique约束

alter table tb_Student ADD Constraint Uk_Depname Unique(Deptname)

15、--删除unique约束

Alter table tb_student Drop Constraint uk_Depname

16、--创建默认值约束

Create table tb_student

(

stuId char(10) Primary key,

stuName char(8) not null,

DeptID char(2) Not null references tb_Dept,

sex char(2) not null default 'M',

Birthday smalldatetime not null default getdate()

)

17、--添加默认值约束

alter table tb_student ADD constraint DEF_sex default 'M' for sex

18、--删除默认值约束

alter table tb_student Drop Constraint DEF_Sex

19、--创建表时,创建check约束

create table tb_student

(

StudId char(10) Primary key,

Studname char(8) not null,

DeptId char(2) not null references tb_Dept,

sex char(2) not null default 'M' check(sex in ('M','F')),

zipcode char(6) not null check (Zipcode like '[0-9][0-9][0-9][0-9][0-9][0-9]' ),

constraint ck_StudID Check (StudId like 'S[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')

)

20、--check约束的其他例子

check(coursescore >= 0 and coursescore < = 100)

check(empld like '[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' or empld like '[A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]')

check(telno in (?',?',?',?',?') or telno like ?[0-9][0-9]')

check(salary between 3000 and 10000)

check(is_manager = 1 and sex = 'F')

check(case when is_manager<> 1 and sex = 'F') Then 1 Else 0 End = 0

21、--添加check约束

alter table tb_student with nocheck ADD Constraint ck_Sex check(sex in ('M','F'))

22、--删除check约束

alter table tb_student Drop constraint ck_sex

数据完整性总结

1、--Primary key 约束

--非聚集索引不超过个,聚集索引最多个

--primary key未指定索引,索引类型与Unique相同

--Primary key的所有列必须非空not null

2、--Unique约束

--默认使用nonclustered

--每个Unique都生成一个索引,非聚集索引不超过,聚集索引最多个

3、--Foreign key

--Foreign key列输入非空值,该值必须在被引用列中存在

--Foreign key约束仅能引用同一服务器的数据库表,跨数据库的引用必须通过触发器实现

--列级的Foreign key约束的references子句只能列出一个引用列,且数据类型必须相同

--表级Foreign key约束的references子句引用列的数目必须与约束列的列数相同,没个列的数据类型必须相同

--类型为timestamp的列是外键、被引用键的部分,不能指定cascade、set Null、set default

--临时表不强制Foreign key约束

--Foreign key只能引用所引用的表的Primary key或unique 约束中的列,或引用的表上的Unique Index中的列

4、--Default定义

--每列只能有一个Default定义

--Default定义可以包含常量值,函数,或Null

--不能对类型为timestamp的列,或自增长型的列,创建Default定义

5、--Check约束

--列级Check约束只能引用被约束的列,表级Check约束只能引用同一表中的列

--不能在text、ntext、或image列上定义check约束

6、--其他约束相关信息

--为约束创建的索引不能用Drop Index删除,必须用Alter table删除约束

--如果某个表有约束以及触发器,则将在触发器执行前先检查约束条件

--若要获得关于表及其列的报表,请使用sp_help或sp_helpconstraint表名

--若要获得与表相关的视图和存储过程的报表,请使用sp_depends

--若列为计算列,是否为空由系统确定。使用带AllowsNull属性的ColumnProperty函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐