主键(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 &#39M',
Birthday smalldatetime not null default getdate()
)
17、--添加默认值约束
alter table tb_student ADD constraint DEF_sex default &#39M' 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 &#39M' check(sex in (&#39M',&#39F')),
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 &#39S[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 = &#39F')
check(case when is_manager<> 1 and sex = &#39F') Then 1 Else 0 End = 0 
21、--添加check约束
alter table tb_student with nocheck ADD Constraint ck_Sex check(sex in (&#39M',&#39F'))
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函数

SQLServer 主键、外键、唯一等约束的更多相关文章

  1. 第15课-数据库开发及ado.net-数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库

    第15课-数据库开发及ado.net 数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库 1.  学习方法 2.  多涨见识 3.  比自己强的人一起,学习更强:比自己更聪明的人 ...

  2. Django笔记&教程 4-3 模型(models)主键外键

    Django 自学笔记兼学习教程第4章第3节--模型(models)主键外键 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref/models ...

  3. 关系型数据库——主键&外键的

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  4. EF中主表和附表一起提交的话,如果主附表的主键外键已经设定。

    EF中主表和附表一起提交的话,如果主附表的主键外键已经设定,如果新增同时新增主表和附表的记录,那么在EF同时提交时,不需要人为的设定附表的主表的主键值,EF会自动为附表添加外键值.

  5. Day054--MySQL, 创建用户和授权, 数据类型, 枚举和集合, 约束,唯一, 主键,外键

    创建用户和授权 1.创建用户: # 指定ip:192.118.1.1的mjj用户登录 create user 'mjj'@'192.118.1.1' identified by '123'; # 指定 ...

  6. Sql Server 主键 外键约束

    主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如果为 ...

  7. SQL Server修改主、外键和约束

    0.创建表 create table Users ( Id int, Name ), Phone ), Email ), Role_Id uniqueidentifier ) go create ta ...

  8. SqlServer主键外键添加及判断表是否存在

    GO --判断表是否存在方式1 if object_id(N'EF_User',N'U') is null --判断表是否存在方式2 --if not exists (select * from db ...

  9. 2016年11月17日--SQL主、外键,子查询

    主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...

  10. SQL server 子查询、设置主键外键、变量及变量查询

    一.子查询 子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这 ...

随机推荐

  1. 剖析ElasticSearch核心概念,NRT,索引,分片,副本等

    ElasticSearch 的核心概念 Near RealTime(NRT) 近实时 近实时有两种意思,一种是从写入数据到可以被搜索到有一个小延迟(大概一秒),还有一种就是基于ElasticSearc ...

  2. day3-三级目录

    date = {"guangdong":{"guangzhou":{"tianhe":["tyx","zjxc ...

  3. C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)

    最近做的项目中服务器是英文的系统,系统需要通过excel的单元格导入日期,excel中的日期格式是系统默认的日期格式,如下图所示 以上日期格式,会跟着操作系统设置的日期格式相同例如我的中文系统的日期格 ...

  4. oracle Extract 函数

    //oracle中extract()函数从oracle 9i中引入,用于从一个date或者interval类型中截取到特定的部分   //语法如下:   EXTRACT (           { Y ...

  5. 在chrome console中添加jQuery

    由于现有seajs等封装,jQuery等已不在全局暴露,即使网站中已使用jQuery,在console也使用不了. 在chrome中可以用以下代码加入jQuery: fetch('http://cod ...

  6. solr中facet及facet.pivot理解(整合两篇文章保留参考)

    Facet['fæsɪt]很难翻译,只能靠例子来理解了.Solr作者Yonik Seeley也给出更为直接的名字:导航(Guided Navigation).参数化查询(Paramatic Searc ...

  7. 判断单向连通图(拓扑排序+tarjan缩点)

    题意: 给你一个有向图,如果对于图中的任意一对点u和v都有一条从u到v的路或从v到u的路,那么就输出’Yes’,否则输出’No’. 理解:当出现两个及以上入度为0的点(有一个就可能是别人到它,有两个的 ...

  8. 自动生成 java 测试 mock 对象框架 DataFactory-01-入门使用教程

    项目简介 Data-Factory 用于根据对象,随机自动生成初始化信息,避免了手动创建对象的繁琐,便于测试. 特性 8 大基本类型的支持 String.Date.金额,日期等常见类型的支持 java ...

  9. springboot学习随笔(一):springboot环境构建:eclipse+maven+jdk1.8

    一:所需环境 1.jdk1.8(配置环境变量,可自行搜索相关文档) 2.maven(maven的配置不在赘述,可自行搜索相关文档) 3.eclipse(第三种方式,eclipse集成sts时需要,直接 ...

  10. frist Django app — 五、Test

    Test——很重要但是没有被重视起来的一个环节,至少是我自己,其实自己之前在做java web的时候就去尝试过怎么做REST接口的测试,一直没有找到一种合适方式,而且因为时间紧没有进一步深究,但是造成 ...