T-SQL 学习之路之数据库完整性之域完整性
数据库完整性是指对数据库的一致性和准确性强制数据完整性可靠性保证数据库中数据的质量。
---------------------数据库完整性分类
数据完整性一般分为域完整性,实体完整性,参照完整性,用户自定义完整性。
1,域完整性
域完整性指列数据输入的有效性,又称列完整性,通过CHECK约束、DEFALUT约束、NOT NULL约束、数据类型和规则等实现域完整性。
CHECK约束通过显示输入到列中的值来实现域完整性。
例如:对于stsc数据库score表,grade规定为0分到100分之间,可用CHECK约束表示。
2,实体完整性
实体完整性要求表中有一个主键,其值不能为空且能唯一地标识对应的记录,又称为行完整性,通过PRIMARY KEY 约束、UNIQUE约束、索引或IDENTITY 属性等实现数据的实体完整性。
例如,对于stsc数据库中student表,stno列作为主键,每一个学生的stno列能唯一地标识该学生对应的行记录信息,通过stno列建立主键约束实现student表的实体完整性。
3,参照完整性
参照完整性保证主表中的数据与从表中数据的一致性,又称为引用完整性,在SQL Server 2008中,通过定义主键(主码)与外键(外码)之间的对应关系实现参照完整性,参照完整性确保键值在所有表中一致。
主键:表中能唯一标识每个数据行的一个或多个列。
外键:一个表中的一个或多个列的组合是另一个表的主键。
4,用户自定义完整性
用户自定义完整性不属于其他任何完整性类别的特定业务规则,所有完整性类别都支持用户定义完整性,包括CREATE TABLE 中所有的列级约束和表级约束,存储过程和触发器。
-------------------------域完整性
1,check约束
CHECK约束用于对输入列或者整个表中的值设置检查条件,以限制输入值,从而保证数据库的完整性。
A, 使用T-SQL 语句在创建表时创建CHECK约束。
语法格式如下:
CREATE TABLE table_name /*指定表名*/
(column_name datatype{NOT NULL | NULL /*指定为空性*/| [ DEFAULT co nstraint_expression ] /*指定默认值| [ CONSTRAINT constraint_name ] CHECK ( logical_expression )] /*CHECK约束表达式*/}[,…n][ CONSTRAINT constraint_name ] CHECK ( logical_expression )][,
)
其中,关键字 CHECK表示 CHECK约束。 logial_expression为 CHECK约束表达式。
例如:在stsc数据库中创建表goods,包含有关域完整性的定义。
USE stsc
CREATE TABLE goods
(gid int NOT NULL, /*商品号*/gname varchar(100) NOT NULL, /*商品名*/gprice float NOT NULL CHECK(gprice<=500), /*价格*/gclass varchar(60) DEFAULT 'articles of everyday use', /*类型*/gamount int NOT NULL, /*数量*/gdate date NULL, /*上架日期*/trade_price float NOT NULL /*批发价格*/
)
注意:如果在指定的一个月书中涉及多个列,则该约束必须定义为表的约束。
B,使用 T-SQL 语句在修改表时创建 CHECK约束
使用ALTER TABLE 的ADD 子句在修改表时创建CHECK约束,其语法格式如下:
ALTER TABLE table_name ADD [<column_definition>][CONSTRAINT constraint_name] CHECK (logical_expression)
例如: 通过修改stsc数据库的goods表,增加批发价格列的 CHECK约束。
USE stsc
ALTER TABLE goods
ADD CONSTRAINT CK_trade_price CHECK(trade_price<=500)
C,使用 T-SQL语句删除 CHECK约束
使用 ALTER TABLE 语句的 DROP 子句删除CHECK约束。其语法格式如下:
ALTER TABLE table_name DROP CONSTRAINT check_name
例如:删除stsc数据库的goods表批发价格列的 CHECK约束
USE stsc
ALTER TABLE goods
DROP CONSTRAINT CK_trade_price
2,DEFAULT约束
DEFALUT约束通过定义列的默认值或使用数据库的默认值对象绑定表的列,当没有为某列指定数据时,自动指定列的值。在创建表时,可以创建 DEFAULT约束作为表定义的一部分。如果某个表已经存在,则可以为其添加 DEFAULT约束,表中的每一列都可以包含一个 DEFAULT约束。
默认值可以是常量,也可以是表达式,还可以为NULL值。
创建表时创建 DEFALUT约束的语法格式如下:
[CONSTRAINT constraint_name]
DEFAULT constant_expression [FOR column_name]
例如:在stsc数据库中创建st表时建立 DEFALUT约束。
USE stsc
CREATE TABLE st
(stno char(4) NOT NULL PRIMARY KEY, stname char(8) NOT NULL,stsex char(2) NOT NULL DEFAULT '男', /* 定义stsex列DEFALUT约束值为'男' */stbirthday date NOT NULL,specialist char(12) NULL DEFAULT '计算机', /* 定义specialist列DEFALUT约束值为'计算机' */tc int NULL
)
GO
T-SQL 学习之路之数据库完整性之域完整性相关推荐
- alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组)
alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组) 1. SQL语句 1.1 sql语言类型 sql是一门独立的 ...
- alin的学习之路(数据库篇:三)(多表查询,子查询,集合运算,数据处理)
alin的学习之路(数据库篇:三)(多表查询,子查询,集合运算,数据处理) 1. 多表查询 1.1 笛卡儿积 笛卡尔积就是两个集合的乘积计算 . 如果多个表进行联合查询, 得到结果是一个笛卡尔积, 举 ...
- alin的学习之路(数据库篇:五)(MySQL的相关语句及API的C语言实现)
alin的学习之路(数据库篇:五)(MySQL的相关语句及API的C语言实现) 1. MySQL概述与登陆MySQL mysql 与 oracle 的区别 oracle 是一个数据库实例下有多个用户, ...
- mysql实体完整性实现方法_mysql数据库 --数据完整性---实体完整性-域完整性-参照完整性...
一.数据完整性 数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入. 数据完整性分为实体完整性.域完整性.参照完整性. 2.1实体(行)完整性 (实体完整性中的实体指的是表中的行 ...
- Mysql DBA 高级运维学习之路-mysql数据库入门知识
1.MySQL数据库介绍 MySQL是一种关系型数据库管理系统,关系型数据库的特点是将数据保存在不同的表中,在将这些表放在不同的数据库中,而不是将所有数据统一放在一个大仓库里,这样设计增加了MySQL ...
- SQL学习笔记——task1:数据库安装及基本语法操作
文章目录 前言 一.MySQL 8.0的下载与安装 1.1Windows下MySQL8.0的下载安装 二.数据库知识点 2.1初始数据库 2.2 初始SQL 3.数据库的创建 前言 一.MySQL 8 ...
- mysql 服务无法启动 没有报告任何错误_My SQL学习之路(一)
首先安装参照下方链接 猴子:超级详细的mysql数据库安装指南zhuanlan.zhihu.com 里面图形化Navicat工具界面很好用,可以帮您创建mysql数据库实例,就不用以下的配置文件这些 ...
- mysql dba管理_Mysql DBA 高级运维学习之路-mysql数据库常用管理应用
1.创建数据库 命令语法:create database 注意库名不能数字开头 (1)创建linzhongniao库 mysql> create database linzhongniao; Q ...
- 一名数据分析师的SQL学习历程
作者:luanhz 来源:小数志 导读 一直认为,扎实的SQL功底是一名数据分析师的安身立命之本,甚至可以称得上是所有数据从业者的基本功.当然,这里的SQL绝不单单是写几条查询语句那么简单,还包括数据 ...
最新文章
- JMeter基础之——录制脚本
- c语言void replace(str,ch)替换字符串,C++ 中字符串查找、字符串截取、字符串替换...
- 12新特性格式化输出f-string
- event.keycode值大全
- numpy的基本使用2
- git reset --hard_Git紧急自救简易指南(二)——版本的游历
- 英语口语海报演讲--东软
- java方法调用的格式_Java基础(一)---方法的调用
- IOS机型margin属性无效问题
- 吃番薯叶有什么好处?
- Unity3D基础15:触发器
- python错误异常
- 【路径规划】基于matlab麻雀算法求解机器人栅格地图最短路径规划问题【含Matlab源码 1582期】
- Qt 窗口置顶 | 和取消置顶
- 内存的速度和CPU缓存速度比较
- 电脑连不上网络,报红叉,网络适配器报黄色警告,错误代码56,解决办法
- 3.13 speculative generality (夸夸其谈未来性)
- java微服务开发(基础环境篇)
- web标准是html5,什么是HTML5-WEB标准专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....
- 第65天-内网安全-域环境工作组局域网探针方案