数据库中的完整性约束及实例
2019独角兽企业重金招聘Python工程师标准>>>
1 定义 数据完整性用于保证数据库中数据的正确性、一致性和可靠性。 2 类型 • 实体完整性(Entity Integrity) • 域完整性(Domain Integrity) • 参照完整性(Referential Integrity) • 用户定义完整性(User-defined Integrity) 图示
实体完整性(Entity Integrity) 实体完整性用于保证数据库中数据表的每一个特定实体的记录都是唯一的 。
约束种类 功能描述 PRIMARY KEY(主键)约束 唯一识别每一条记录的标志,可以有多列共同组成 IDENTITY(自增)约束 列值自增,一般使用此属性设置的列作为主键 UNIQUE(唯一)约束 可以使用UNIQUE约束确保在非主键列中不存在重复值,但列值可以是NULL(空)
域完整性(Domain Integrity) 域完整性是指保证指定列的数据具有正确的数据类型、格式和有效的数据范围。
CHECK(检查)约束 用于限制列中值得范围 FOREIGN KEY(外键) 一个表中的FORENIGN KEY 指向另一个表中的PRIMARY KEY DEFAULT(默认值)约束 用于向列中插入默认值 NOT NULL(非空)约束 用于强制列不接受NULL(空)值
参照完整性(Referential Integrity) 当增加、修改或删除数据库表中记录时,可以借助参照完整性来保证相关联表之间数据的一致性 。 用户定义完整性 (User- defined Integrity) 这是由用户定义的完整性。用户定义完整性可以定义不属于其他任何完整性分类的特定业务规则 。
注意: 1、PRIMARY KEY用于将表中的某类设置为主键,一张表中只有一个主键,主键可以是一列或由多列组成。 2、NOT NULL是对列值进行限制,即在表中添加数据时不允许有NULL值。 3、CHECK约束的语法规则:CHECK(表达式) 外键的使用:字段名 数据类型 [FOREIGN KEY] REFERENCES 表名(字段名)
===================================
3 数据完整性的实现方式
声明数据完整性和过程数据完整性 (1)使用IDENTITY(标识符)列 语法格式: CREATE TABEL 数据表名 (列名 列数据类型 IDENTITY [(种子, 增量)] [,…]) 说明:标识种子为标识列的起始值,标识递增量为每次增加的数,二者的默认值均为1。 (2)使用IDENTITY函数 语法格式: IDENTITY ( 数据类型 [ , 种子 , 递增量 ] ) AS 列名 说明:只用在带有 INTO table 子句的 SELECT 语句中,可以将标识列插入到新表中。 尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。
完整性类型 约束类型 描述 域 DEFAULT 指定列的默认值 CHECK 指定列的允许值 FOREIGN KEY 指定必须存在值的列 NULL 指定是否允许为NULL 实体 PRIMARY KEY 唯一标识每一行 UNIQUE 防止非主键重复 引用 FOREIGN KEY 定义值与同一个表或另一个表的主键值匹配的一列或多列组合 CHECK 指定根据同一个表中其他列的值可在列中接受的数据值
在SQL SERVER中,对于基本表的约束分为列约束和表约束。 完整性约束的基本语法格式为: [CONSTRAINT constraint_name(约束名)] <约束类型> 约束不指定名称时,系统会给定一个名称。 在SQL Server 2005中有6种约束:主键约束(primary key constraint)、惟一性约束(unique constraint)、检查约束(check constraint)、默认约束(default constraint)、外部键约束(foreign key constraint)和空值(NULL)约束。 PRIMARY KEY 约束 PRIMARY KEY约束用于定义基本表的主键,它是惟一确定表中每一条记录的标识符,其值不能为NULL,也不能重复,以此来保证实体的完整性。PRIMARY KEY与UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别: ①一个表只能有一个 PRIMARY KEY 约束 ,但可定义多个UNIQUE约束; ②对于指定为PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。 注意:不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARY KEY约束; PRIMARY KEY既可用于列约束,也可用于表约束。 (2)使用Transact-SQL语句操作法设置主键约束,其语法形式如下: PRIMARY KEY
CONSTRAINT constraint_name PRIMARY KEY ( column_name ) 举例:建立一个SC表,定义SNO,CNO共同组成SC的主键 程序清单如下: create table sc( sno char(5) not null, cno char(5) not null, score numeric (3), constraint sc_prim primary key(sno,cno) ) UNIQUE约束 惟一性约束用于指定一个或者多个列的组合值具有惟一性,以防止在列中输入重复的值。定义了UNIQUE约束的那些列称为唯一键,系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。 当使用惟一性约束时,需要考虑以下几个因素: • 使用惟一性约束的字段允许为空值; • 一个表中可以允许有多个惟一性约束; • 可以把惟一性约束定义在多个字段上; • 惟一性约束用于强制在指定字段上创建一个惟一性索引; • 默认情况下,创建的索引类型为非聚集索引。 使用Transact-SQL语句完成惟一性约束的操作,其语法形式如下: • UNIQUE • CONSTRAINT constraint_name UNIQUE ( column_name ) CHECK 约束 检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。 当使用检查约束时,应该考虑和注意以下几点: • 一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关; • 一个表中可以定义多个检查约束; • 每个CREATE TABLE语句中每个字段只能定义一个检查约束; • 在多个字段上定义检查约束,则必须将检查约束定义为表级约束; • 当执行INSERT语句或者UPDATE语句时,检查约束将验证数据; • 检查约束中不能包含子查询。 用Transact-SQL语句创建检查约束。其语法形式如下: • CONSTRAINT constraint_name CHECK (logical_expression) • CHECK (logical_expression) create table sc( sno char(5) not null, cno char(5) not null, score numeric(5,1) constraint score_chk check(score>=0 and score <=100), constraint sc_prim primary key(sno,cno),
) drop table sc insert into sc values('1','2',3) DEFAULT 约束 默认约束指定在插入操作中如果没有提供输入值时,则系统自动指定值。默认约束可以包括常量、函数、不带变元的内建函数或者空值。 使用默认约束时,应该注意以下几点: (1)每个字段只能定义一个默认约束; (2)如果定义的默认值长于其对应字段的允许长度,那么输入到表中的默认值将被截断; (3)不能加入到带有IDENTITY属性或者数据类型为timestamp的字段上; (4)如果字段定义为用户定义的数据类型,而且有一个默认绑定到这个数据类型上,则不允许该字段有默认约束。 创建默认约束的Transact-SQL语句操作法。其语法形式如下: • CONSTRAINT constraint_name DEFAULT constraint_expression [FOR column_name] • DEFAULT constraint_expression [FOR column_name] 举例:为 dept字段创建默认约束。 程序清单如下: constraint con_dept default ‘计算机’ for dept NULL 约束 空值约束用来控制是否允许该字段的值为NULL。NULL值不是0也不是空白,更不是填入字符串的“NULL”字符串,而是表示“不知道”、“ 不确定”或“没有数据”的意思。 当某一字段的值一定要输入才有意义的时候,则可以设置为NOT NULL。如主键列就不允许出现空值,否则就失去了唯一标识一条记录的作用。空值约束只能用于定义列约束。 FOREIGN KEY 约束 FOREIGN KEY约束是用于建立和加强两个表数据之间的链接的一列或多列。外部键约束用于强制参照完整性。
FOREIGN KEY 约束确保同一个表或者不同表之间的引用完整性 必须引用一个PRIMARY KEY或者UNIQUE约束 用户必须在应用表上具有REFERENCES权限 一个表中最多可以有31个外部键约束; 在临时表中,不能使用外部键约束; 主键和外部键的数据类型必须严格匹配 。
使用Transact-SQL语句设置外部键约束 ,其语法形式如下: CONSTRAINT constraint_name FOREIGN KEY (column_name[,…n]) REFERENCES ref_table [(ref_column[,…n])] ALTER TABLE [Sales].[SalesOrderHeader] WITH CHECK ADD CONSTRAINT [FK_SalesOrderHeader_Customer_CustomerID] FOREIGN KEY([CustomerID]) REFERENCES [Sales].[Customer] ([CustomerID]) 禁用 CHECK 和 FOREIGN KEY 约束: 当运行大型批处理作业时提高性能 当向表中添加新的约束的时候避免检查已经存在的数据
=============================
必须会的SQL语句:数据库的完整性约束 实体完整性
1.建表时定义主键 Create table 表名 ( Sno int identity(1,1), Sname nvarchar(20), --设置主键 Primary key (Sno) )
2.添加主键 alter table 表名 add constraint PK_表名_Sno primary key(id)
参照完整性
1.建表时定义外键 create table 表名 ( sno int identity(1,1) primary key, cno int not null, foreign key(cno) References 表名2(Cno) on Delete cascade --级联删除 on update cascade --级联更新 -- on delete on action 删除管制 )
2.添加外键 alter table 表名 add constraint FK_表名_表名2 Foreign key(cid) references 表名2(cid)
用户定义完整性
1.非空约束 alter table 表名 alter column name varchar(20) not null
2.唯一约束 alter table 表名 add constraint UQ_表名_列名 unique(列)
3.检查约束 alter table 表名 add constraint CK_表名_列名 check(age>5)
4.默认约束 alter table 表名 add constraint DF_表名_列名 default('男') for gender
删除约束 --删除约束 alter table 表名 drop constraint DF_表名_列
ref:http://yinxiangbing.iteye.com/blog/673768 另可参考:http://blog.csdn.net/xiang462042190/article/details/40658427 http://www.cnblogs.com/sixbeauty/p/4016284.html
转载于:https://my.oschina.net/u/1011854/blog/1546702
数据库中的完整性约束及实例相关推荐
- 怎样在一个Oracle数据库中建立多个实例
前言:前两天,在接触一个新项目,他们的数据库框架,在一台机器上,当时别人交代是一个数据库两个实例(当前举例a,b),我看了看交接文档,那明明是一台机器,不是单机数据库吗?怎么有两个实例?登录相应的环境 ...
- 数据库中的触发器的实例讲解
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , ...
- delphi mysql 图片_如何读取delphi数据库中的图片
展开全部 第7章 数据库处理实例 实例122 在数据库中存取图像 本实例演示如何在数据库中存取图像文件. 向窗体上添加一个TListBox组件.3231313335323631343130323136 ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- python通过什么连接数据库_python中常用的各种数据库操作模块和连接实例
这篇文章主要介绍了python中常用的各种数据库操作模块和连接实例,包括sqlite3.oracle.mysql.excel,需要的朋友可以参考下 工作中,经常会有用python访问各种数据库的需求, ...
- 帝国cms php sql,帝国CMS下在PHP文件中调用数据库类执行SQL语句实例
帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 例1:连接MYSQL数据库例子.(a.php) db_close(); //关闭MYSQL链接$empire=null; //注消操作类变量? ...
- php如何逐条读取数据库,php从数据库中读取特定的行(实例)
有的时候我们需要从数据库中读取特定的数据,来检验用户的输入,这个时候需要执行的sql语句是: select * from table_name where id='num'; 需要执行这样的一个语句. ...
- oracle数据库全数据库名,Oracle数据库中的 数据库域名、数据库名、全局数据库名、SID、数据库实例名、服务名 解释...
菜鸟雷区 在配置listener.ora 和 tnsnames.ora 连接Oracle数据库服务器时,我们需要把 以下容易混淆的概念区分开来 数据库域名 数据库名 全局数据库名 SID 数据库实例名 ...
- 云服务器怎么执行sql文件在哪里,总结帝国CMS下在PHP文件中怎么调用数据库类执行SQL语句实例...
总结帝国CMS下在PHP文件中怎么调用数据库类执行SQL语句实例 发布时间:2020-10-19 14:58:08 来源:亿速云 阅读:83 作者:小新 这篇文章将为大家详细讲解有关总结帝国CMS下在 ...
最新文章
- linux 脚本 expected,Linux | shell与expect结合使用
- 【离散数学】命题逻辑联结词的自然语言表述
- python string转int_Python int与string之间的转化
- Spatial Transformer Networks
- 开发一个最简单的Cardboard虚拟现实应用(四)做一个Cardboard第一人称控制器
- 【CV】计算机视觉入坑必备
- miui tv android,MIUI for TV 3.0上线 应用远程安装 手机反控电视
- APICloud开源O2O商城源码
- 信息化建设中的IT规划精要
- 怎么用计算机进行进制间的换算,如何实现16进制与其他进制之间的转换,教你使用16进制计算器...
- 2021计算机专硕调剂院校,2021年已公布的调剂院校专业
- jQuery插件库免下载做法
- Ardunio开发实例-OPT3001数字环境光传感器
- bootrom的类型
- 【思维导图】对外经济贸易大学公开课:企业财务报表分析
- js【详解】arr.sort()数组排序(内含十大经典排序算法的js实现)
- 使用Excel制作一个动态计划表
- Streamsets相关资料汇总
- 【转】一个女留学生在美国的七年
- 人们愿意购买亲手摸过的商品
热门文章
- Chrome浏览器 开发者工具中的 Performance
- 【HDFS】HDFS操作命令
- 【SQL】IN、EXISTS和表连接三者的效率比较
- 关于cocos2d-x中CCScrollView和CCMenu触摸优先级的解决方案
- 计算机中丢失api-ms-win-crt-runtime-
- C++异常处理:try,catch,throw,finally的用法
- 关于angular开发中报错Cannot find module ‘webpack/lib/node/NodeTemplatePlugin‘问题的解决办法若干
- 绝对位置,但相对于父位置
- 枚举的字符串表示形式
- win11u盘安装报错怎么办 windows11u盘安装报错的解决方法