主键约束、外键约束、唯一约束、检查约束、默认值约束实例
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函数
主键约束、外键约束、唯一约束、检查约束、默认值约束实例相关推荐
- 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)
在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...
- mysql怎么约束指定默认值_mysql 默认值约束
"默认值(Default)"的完整称呼是"默认值约束(Default Constraint)".MySQL 默认值约束用来指定某列的默认值. 例如女性同学较多, ...
- SQL语句 -非空约束 - 唯一约束 - 主键约束 - 默认约束 -外键约束
文章目录 约束 约束介绍和分类 非空约束 唯一约束 主键约束 默认约束 案例练习 外键约束 约束 约束介绍和分类 约束的概念: 约束是作用于表中列上的规则,用于限制加入表的数据 约束的存在保证了数据库 ...
- MySQL设置主键、联合主键、外键、唯一约束、非空约束、默认约束
MySQL登录.查看记录等基本操作 MySQL设置表的属性值自动增加 auto_increment 1.主键.联合主键.外键 1.什么是主键 主键是在多条记录中用于确定一条记录时使用的标识符.主键具备 ...
- 【MySQL】(七)SQL约束——主键约束、非空约束、唯一约束、默认值约束、外键约束
目录 1. 主键约束 1.1 SQL 约束 1.2 主键约束 1.3 添加主键约束 1.4 创建主键自增的表 1.5 修改主键自增的起始值 1.6 删除主键约束 1.7 选择主键原则 2. 非空约束 ...
- SQL的主键和外键约束
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...
- 数据库元数据数据字典查询_5_列出给定表的主键、外键约束
列出给定表的主键.外键约束 需求描述 需求:查询出给定的表emp的外键约束信息. 解决方法:通过各个数据库里提供的与外键约束相关的数据字典进行查询. 注: 数据库数据集SQL脚本详见如下链接地址 员工 ...
- SQL数据库语言基础之SqlServer数据表的六大约束(主键、外键、检查、非空、唯一性、默认值约束)的创建
文章目录 一.主键约束(primary key) 二.外键约束(foreign key) 三.检查约束(check) 四.非空约束(not null) 五.唯一性约束(unique) 六.默认值约束( ...
- templet 显示字段外键对应名_主外键和外键约束
主外键和外键约束 主键 主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 . 外键 外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个 ...
最新文章
- mybatis mysql 配置文件_Mybatis配置文件详解(4)
- java删除本地文件_读取Properties文件六种方法
- Tomcat服务在Eclipse中能够正常启动,但页面出现404错误的解决方法
- 责任心,内因还是外因?
- left join 效率_人力资源HR的人才测评工具,极大提高招聘效率
- SAP中的默认帐户与密码
- bash初识,shell的基础语法及基本特性
- 宜信PaaS平台基于Calico的容器
- ubuntu16.04装机7:安装VScode
- 解决ubuntu不能远程连接
- Atitit. 资深高级软件工程师and 普通的区别 高度金字塔 深度 广度 1. 高度金字塔 深度 广度	1 1.1. 角色差异高度金字塔 使用者 维修者 制造者	1 1.2. 广度圈	1 1
- JAVA代码查错试题集
- 实验室信息管理系统是基础软件吗
- Scrapy 爬取链家租房价格信息
- 关于贴片机如何获取元件的位置思考
- 食品安全管理知识演讲PPT模板
- ECharts 区域缩放组件使用详解
- 马尔科夫随机场和马尔科夫链
- VMware虚拟机安装Kali Linux操作系统
- Scipy文件输入/输出mat,wav,mp3
热门文章
- Git之深入解析如何选择修订的版本
- OpenGL ES之深入解析如何实现“手写绘画板”
- 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - C. 三羊献端
- Python读取大文件的坑“与内存占用检测
- 并发编程——进程池与线程池
- JS实现的ajax发送数据重复
- Martix工作室考核题 —— 2019-3-8 第一题
- 《算法竞赛入门经典》 习题4-5 IP网络(IP Networks,ACM、ICPC NEERC 2005,UVa1590)
- 28335的CPU定时器解析
- 【ARM】Tiny4412裸板编程之蜂鸣器(C语言)