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函数

主键约束、外键约束、唯一约束、检查约束、默认值约束实例相关推荐

  1. 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)

    在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...

  2. mysql怎么约束指定默认值_mysql 默认值约束

    "默认值(Default)"的完整称呼是"默认值约束(Default Constraint)".MySQL 默认值约束用来指定某列的默认值. 例如女性同学较多, ...

  3. SQL语句 -非空约束 - 唯一约束 - 主键约束 - 默认约束 -外键约束

    文章目录 约束 约束介绍和分类 非空约束 唯一约束 主键约束 默认约束 案例练习 外键约束 约束 约束介绍和分类 约束的概念: 约束是作用于表中列上的规则,用于限制加入表的数据 约束的存在保证了数据库 ...

  4. MySQL设置主键、联合主键、外键、唯一约束、非空约束、默认约束

    MySQL登录.查看记录等基本操作 MySQL设置表的属性值自动增加 auto_increment 1.主键.联合主键.外键 1.什么是主键 主键是在多条记录中用于确定一条记录时使用的标识符.主键具备 ...

  5. 【MySQL】(七)SQL约束——主键约束、非空约束、唯一约束、默认值约束、外键约束

    目录 1. 主键约束 1.1 SQL 约束 1.2 主键约束 1.3 添加主键约束 1.4 创建主键自增的表 1.5 修改主键自增的起始值 1.6 删除主键约束 1.7 选择主键原则 2. 非空约束 ...

  6. SQL的主键和外键约束

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  7. 数据库元数据数据字典查询_5_列出给定表的主键、外键约束

    列出给定表的主键.外键约束 需求描述 需求:查询出给定的表emp的外键约束信息. 解决方法:通过各个数据库里提供的与外键约束相关的数据字典进行查询. 注: 数据库数据集SQL脚本详见如下链接地址 员工 ...

  8. SQL数据库语言基础之SqlServer数据表的六大约束(主键、外键、检查、非空、唯一性、默认值约束)的创建

    文章目录 一.主键约束(primary key) 二.外键约束(foreign key) 三.检查约束(check) 四.非空约束(not null) 五.唯一性约束(unique) 六.默认值约束( ...

  9. templet 显示字段外键对应名_主外键和外键约束

    主外键和外键约束 主键 主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 . 外键 外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个 ...

最新文章

  1. mybatis mysql 配置文件_Mybatis配置文件详解(4)
  2. java删除本地文件_读取Properties文件六种方法
  3. Tomcat服务在Eclipse中能够正常启动,但页面出现404错误的解决方法
  4. 责任心,内因还是外因?
  5. left join 效率_人力资源HR的人才测评工具,极大提高招聘效率
  6. SAP中的默认帐户与密码
  7. bash初识,shell的基础语法及基本特性
  8. 宜信PaaS平台基于Calico的容器
  9. ubuntu16.04装机7:安装VScode
  10. 解决ubuntu不能远程连接
  11. Atitit. 资深高级软件工程师and 普通的区别 高度金字塔 深度 广度 1. 高度金字塔 深度 广度 1 1.1. 角色差异高度金字塔 使用者 维修者 制造者 1 1.2. 广度圈 1 1
  12. JAVA代码查错试题集
  13. 实验室信息管理系统是基础软件吗
  14. Scrapy 爬取链家租房价格信息
  15. 关于贴片机如何获取元件的位置思考
  16. 食品安全管理知识演讲PPT模板
  17. ECharts 区域缩放组件使用详解
  18. 马尔科夫随机场和马尔科夫链
  19. VMware虚拟机安装Kali Linux操作系统
  20. Scipy文件输入/输出mat,wav,mp3

热门文章

  1. Git之深入解析如何选择修订的版本
  2. OpenGL ES之深入解析如何实现“手写绘画板”
  3. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - C. 三羊献端
  4. Python读取大文件的坑“与内存占用检测
  5. 并发编程——进程池与线程池
  6. JS实现的ajax发送数据重复
  7. Martix工作室考核题 —— 2019-3-8 第一题
  8. 《算法竞赛入门经典》 习题4-5 IP网络(IP Networks,ACM、ICPC NEERC 2005,UVa1590)
  9. 28335的CPU定时器解析
  10. 【ARM】Tiny4412裸板编程之蜂鸣器(C语言)