100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 主键约束 外键约束 唯一约束 检查约束 默认值约束实例

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

时间:2020-06-09 09:08:23

相关推荐

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

http://xinxinyin666./blog/view/226237927.htm

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

Oracle有如下类型的约束:

NOTNULL(非空)、UNIQUEKey(唯一约束)、PRIMARYKEY(主键约束)、FOREIGNKEY(外键约束)、CHECK约束

Oracle使用SYS_Cn格式命名约束.

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

约束的类型有如下几种:

C(checkconstraintonatable)

P(primarykey)

U(uniquekey)

R(ReferentialAKAForeignKey)

V(withcheckoption,onaview)

O(withreadonly,onaview)

1、创建约束

CREATETABLEstudents(

student_idVARCHAR2(10)NOTNULL,

student_nameVARCHAR2(30)NOTNULL,

college_majorVARCHAR2(15)NOTNULL,

statusVARCHAR2(20)NOTNULL,

stateVARCHAR2(2),

license_noVARCHAR2(30)

)TABLESPACEstudent_data;

2、创建主键:

ALTERTABLEstudentsADDCONSTRAINTpk_studentsPRIMARYKEY(student_id)

USINGINDEXTABLESPACEstudent_index;

Altertabletable_nameaddconstrantsBIDprimarykey(bookno);

ALERTTABLEtable_nameMODIFY(column1PRIMARYKEY);

3、创建Unique约束:

ALTERTABLEstudentsADDCONSTRAINTuk_students_licenseUNIQUE(state,license_no)

USINGINDEXTABLESPACEstudent_index;

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

ALTERTABLEstudentsADDCONSTRAINTck_students_st_licCHECK((stateISNULLANDlicense_noISNULL)OR(stateISNOTNULLANDlicense_noisNOTNULL));

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

altertableempaddconstraintcheck_1check(dept_salary>0);

5、创建外键约束:

ALTERTABLEstudentsADDCONSTRAINTfk_students_stateFOREIGNKEY(state)REFERENCESstate_lookup(state);

6.创建不能为空约束notnull

altertabletable_namemodify(namenotnull);

altertabletable_namemodifyname1varchar2(20)notnull;

实例1:

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

--学生信息表

CREATETABLEstudentInfo(

stuNoCHAR(10)NOTNULL,

stuNameVARCHAR2(20)NOTNULL,

stuSexNUMBER(1),

stuBirthdayDATEDEFAULTSYSDATE,

stuAddressVARCHAR2(20)

);

--学生成绩表

CREATETABLEtestInfo(

stuNoCHAR(10)NOTNULL,

classNoCHAR(5)NOTNULL,

testScoreNUMBER(3,1)

);

--约束条件:设置主键

altertabletestinfoaddconstraintfk_1foreignkey(stuno)referencesstudentinfo(stuno);

--约束条件:设置外键

altertablestudentinfoaddconstraintpk_1primarykey(stuno);

--约束条件:设置唯一

altertabletestinfoaddconstraintuniq_1unique(stuno,classno);

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

1、--创建表

createtabletb_Dept

(

Deptidchar(2)Primarykey,

DeptNamechar(16)NotNull

)

2、--外键约束

createtabletb_Student

(

Studidchar(10)Primarykey,

Studnamechar(8)Notnull,

Deptidchar(2)Notnull,

ConstraintFK_DeptIDForeignKey(Deptid)

ReferencesTb_Dept(DeptID)

)

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

createtableTb_Student

(

StudIdchar(10)Primarykey,

StudNamechar(8)Notnull,

DeptIDchar(2)notnullReferencesTb_Dept

)

4、--创建表,无主键

createtableTb_Class

(

ClassIDchar(8)notnull,

ClassNamevarchar(30)notnull,

DeptIdchar(2)notnull,

ClassStuNumberint

)

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

createtableTb_Class

(

classidchar(8)notnull,

ClassNamevarchar(30)notnull,

DeptIDchar(2)notnull,

ClassStuNumberint

constraintPK_ClassIDPrimarykey

(ClassID,ClassName)

)

6、--新增主键

AltertableTb_classADDConstraintPK_ClassIDprimarykey(Classid)

7、--删除主键

Altertabletb_ClassDeleteConstraintPK_ClassIDPrimarykey(ClassID)

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

Createtabletb_student

(

studIDchar(10)Primarykey,

StudNamechar(10)notnull,

DeptIDchar(2)notnullReferencestb_Dept

OnUpdatecascade

ondeletecascade

)

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

createtabletb_student

(

studidchar(10)Primarykey,

StudNamechar(8)notnull,

DeptIDchar(2)notnull,

ConstraintFK_Deptidforeignkey(DeptID)

ReferencesTb_Dept(DeptID)

onupdateCascade

ondeletecascade

)

10、--创建无外键的表

createtabletb_student

(

studIdchar(10)Primarykey,

StudNamechar(8)notnull,

DeptIDchar(2)notNull

)

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

Altertabletb_StudentADDConstraintFK_DeptIDForeignkey(DeptID)Referencestb_Dept(DeptID)

12、--删除外键约束

Altertabletb_StudentDropConstraintfk_DeptID

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

Createtabletb_Student

(

studIdchar(10)Primarykey,

Studnamechar(8)notnullUniquenonclustered,

DeptIDchar(2)notnullreferencesTb_Dept

)

createtabletb_student

(

studIDchar(10)Primarykey,

Studnamechar(8)notnull,

deptidchar(2)notnullreferencestb_dept,

constraintUk_StunameUnique(Stuname)

)

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

--添加Unique约束

altertabletb_StudentADDConstraintUk_DepnameUnique(Deptname)

15、--删除unique约束

Altertabletb_studentDropConstraintuk_Depname

16、--创建默认值约束

Createtabletb_student

(

stuIdchar(10)Primarykey,

stuNamechar(8)notnull,

DeptIDchar(2)Notnullreferencestb_Dept,

sexchar(2)notnulldefault'M',

Birthdaysmalldatetimenotnulldefaultgetdate()

)

17、--添加默认值约束

altertabletb_studentADDconstraintDEF_sexdefault'M'forsex

18、--删除默认值约束

altertabletb_studentDropConstraintDEF_Sex

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

createtabletb_student

(

StudIdchar(10)Primarykey,

Studnamechar(8)notnull,

DeptIdchar(2)notnullreferencestb_Dept,

sexchar(2)notnulldefault'M'check(sexin('M','F')),

zipcodechar(6)notnullcheck(Zipcodelike'[0-9][0-9][0-9][0-9][0-9][0-9]'),

constraintck_StudIDCheck(StudIdlike'S[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')

)

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

check(coursescore>=0andcoursescore<=100)

check(empldlike'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'orempldlike'[A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]')

check(telnoin(?',?',?',?',?')ortelnolike?[0-9][0-9]')

check(salarybetween3000and10000)

check(is_manager=1andsex='F')

check(casewhenis_manager<>1andsex='F')Then1Else0End=0

21、--添加check约束

altertabletb_studentwithnocheckADDConstraintck_Sexcheck(sexin('M','F'))

22、--删除check约束

altertabletb_studentDropconstraintck_sex

数据完整性总结

1、--Primarykey约束

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

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

--Primarykey的所有列必须非空notnull

2、--Unique约束

--默认使用nonclustered

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

3、--Foreignkey

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

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

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

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

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

--临时表不强制Foreignkey约束

--Foreignkey只能引用所引用的表的Primarykey或unique约束中的列,或引用的表上的UniqueIndex中的列

4、--Default定义

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

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

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

5、--Check约束

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

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

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

--为约束创建的索引不能用DropIndex删除,必须用Altertable删除约束

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

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

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

--若列为计算列,是否为空由系统确定。使用带AllowsNull属性的ColumnProperty函数

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。