SQL数据库约束、默认和规则
数据的完整性
实体完整性 又称为行完整性,即数据库中的所有行都具有一个非空且没有重复的主键值
MSSQL中通过唯一索引、PRIMARY KEY约束、UNIQUE约束、INDENTITY属性等来强制主键的唯一性
域完整性 又叫列完整性,以保证列数据的输入具有正确的数据类型、格式和有效的数据范围
强制域有效性可以通过限制数据类型、CHECK约束和规则、FOREIGN KEY、DEFAULT、NOTNULL定义
参照完整性 又叫引用完整性,旨在保证主表和从表数据的一致性,通过FOREIGN KEY和CHECK约束实现
用户定义完整性 用户定义的不属于以上完整性的特点那个规则
SQL数据库约束、默认和规则
1)约束 CONSTRAINT
实现约束的五种方式:
(1) CHECK约束
[CONSTRAINT 约束名] CHECK (逻辑表达式)
CREATE TABLE 成绩
(
学号 char(8) NOT NULL,
CONSTRAINT ck_cj CHECK (成绩>=0 and 成绩<=100)
)
ALTER TABLE 成绩
ADD CONSTRAINT ck_cj (成绩>=60 and 成绩<=100)
ALTER TABLE 成绩
DROP CONSTRAINT ck_cj
(2)PRIMARY KEY约束
[CONSTRAINT 约束名] PRIMARY KEY [CLUSTERED] [NONLUSTERED]
CREATE TABLE 学生
(
学号 char(8) NOT NULL CONSTRAINT pl_xs PRIMARY KEY CLUSTERED
)
ALTER TABLE 学生
ADD CONSTRAINT pk_xs PRIMARY KEY CLUSTERED(学号)
(3)FOREIGN KEY约束 references
[CONSTRAINT 约束名] FOREIGH KEY (从表外键) PEFERENCES 主表 (主表外键)
CREATE TABLE 成绩
(
学号 char(8) NOT NULL FOREIGN KEY REFERENCES 学生 (学号)
)
(4)UNIQUE约束
[CONSTRAINT 约束名] UINQUE [CLUSTERED\NONCLUSTERED](列名...)
CREATE TABLE 职工
(
身份证号 char(18) NULL CONSTRAINT uni_sfz UNIQUE
)
(5)DEFAULT约束
[CONSTRAINT 约束名] DEFAULT 默认约束值 FOR 列名
CREATE TABLE 学生
(
性别 char(2) DEFAULT '男'
)
默认[DEFAULT]
默认是一种数据库对象,可以绑定在一列或者多列上,作用与DEFAULT约束相似,在插入数据行时,为没有指定数据的列提供实现定义的默认值
创建默认对象
CREATE DEFAULT 默认对象名 AS 默认值
USE 学生成绩
CREATE DEFAULT sex_mr AS '男'
绑定默认对象
sp_bindefault [@defname=] '默认对象名' [@objname] '绑定的列名'
use 学生成绩
go
exec sp_bindefault 'sex_mr','学生.性别'
删除绑定
sp_unbindefault [@objname=] '绑定的列名'
use 学生成绩
go
exec sp_unbindefault '学生.性别'
删除默认对象
DROP DEFAULT 默认对象名
use 学生成绩
go
drop default sex_mr
规则(RULE)
规则也是一种数据库对象,可以绑定在一列或多列上,作用与CHECK约束相似,在插入数据行时,指定接收的数据值的范围
创建规则
CREATE RULE 规则名 AS 规则条件
USE 学生成绩
go
create rule cj_rl as @cj>=0 and @cj<=100
绑定规则
sp_bindrule [@rulename=] '规则对象名' [@objname] '绑定的列名'
use 学生成绩
go
exec sp_bindrule 'cj_rl','成绩.成绩'
删除规则
sp_unbindrule [@objname=] '绑定的列名'
use 学生成绩
go
exec sp_unbindrule '成绩.成绩'
删除规则对象
DROP RULE 规则对象名
use 学生成绩
go
drop rule cj_rl
SQL数据库约束、默认和规则的更多相关文章
- SQL数据库修改默认备份和恢复路径
每次都做数据恢复和备份的时候,点Add文件,系统会自动指定到一个默认路径,是SQL的安装目录,但是我的数据库不是备份在这里,每次都要更改有点麻烦. 如上图,更改这个有三个方法. 方法一:找到注册表,手 ...
- SQL数据库约束
针对维护数据库的完整性,关系型数据库SQL提供了数据约束来管理数据,常用的约束有:外键.唯一.主键. 主键约束:标识数据的唯一,便于数据查询索引: 唯一约束:保证数据的唯一性:常用语法 alter t ...
- SQL数据库约束行为---防止数据乱填(即数据规范化)
防止乱填:一.Check约束.按照某种规则对数据进行检查.操作:在表的设计界面中,右击相应的列,选择“CHECK约束”在弹出的对话框中,设置约束的名称和表达式. 代码实现: create table ...
- SQL数据库约束行为---防止数据漏填
防止有些该填的没有填:一.非空约束不能为NULL.操作:在表的设计界面中“允许NULL值”中的复选框去掉. 二.默认值.如果不给列赋值的话,会使用默认值填上.操作:在表的设计界面,选择相应的列,在下面 ...
- sql数据库快照与恢复 规则绑定
存在数据库快照的话我发进行数据库分离 CREATE DATABASE <快照名称> ON (NAME=<数据库文件名>,FILENAME='<存放地址>') AS ...
- SQL数据库约束行为---防止数据完全重复
防止同一条数据完全重复: 一.主关键字约束:主键约束.1.能够唯一的区分每一行数据.——不许重2.表中的数据按照主键字排序的.——有序3.主键字不能为空——不为空4.一个表只能有一个主键,但可以设置组 ...
- Ms SQL Server 约束和规则
一.SQL约束 约束定义关于列中允许值的规则,是强制完整性的标准机制. 使用约束优先于使用触发器.规则和默认值.查询优化器也使用约束定义生成高性能的查询执行计划. 1:类型 约束的类型一共分三种 域约 ...
- Sql Server约束的学习二(检查约束、默认约束、禁用约束)
接上一篇的Sql Server约束学习一(主键约束.外键约束.唯一约束) 4.检查约束 1)检查约束的定义 检查约束可以和一个列关联,也可以和一个表关联,因为它们可以检查一个列的值相对于另一个列的值, ...
- MySQL-第三篇SQL语句基础(2)数据库约束
1.数据库约束. 约束是在表上强制执行的数据校验规则,约束主要用于保证数据库里数据的完整性. MySQL使用information_schema数据库里的TABLE_CONSTRAINTS表来保存该数 ...
随机推荐
- gb2312,gbk,utf8的区别
GB2312编码大约包含6000多汉字(不包括特殊字符),编码范围为第一位b0-f7,第二位编码范围为a1-fe(第一位为cf时,第二位为a1-d3),计算一下汉字个数为6762个汉字.当然还有其他的 ...
- Cpython解释器下实现并发编程
一 背景知识 二 python并发编程之多进程 三 python并发编程之多线程 四 python并发编程之协程 五 python并发编程之IO模型 六 补充:paramiko模块 七 作业 一 背景 ...
- 统一集中管理系统cronsun简介,替代crontab
一.背景 crontab 是 Linux 系统里面最简单易用的定时任务管理工具,相信绝大多数开发和运维都用到过.在咱们公司,很多业务系统的定时任务都是通过 crontab 来定义的,时间长了后会发现存 ...
- QT Designer基础——登录界面设计基础版
认识QT Designer提供的可选控件:以下八个大类 Layouts:布局相关 Spacers:留空 Buttons:可点击的按钮类 Item Views和 Item Widgets:高级控件,例如 ...
- JDK、CGlib动态代理详解
Java动态代理之JDK实现和CGlib实现(简单易懂) 一 JDK和CGLIB动态代理原理 1.JDK动态代理 利用拦截器(拦截器必须实现InvocationHanlder)加上反射机制生 ...
- project5 大数据
[概念] build和run不是一样的,要看输出,不要误解. [方法论] 先要搞懂每个方法的使用,不能乱写.文件名不要写成字符串内容. 又忘记用lab code了,该死. programcreek是个 ...
- centos7下编译安装php7.3
一.下载php7.3的源码 https://www.php.net/downloads.php 下载php-7.3.4.tar.gz 二.安装gcc,gcc-c++,kernel-devel yum ...
- python 获取流文件 大小
buffer_file_content=u"流文件内容" file_size = len(buffer_file_content)/ #kb
- Git多账号配置,同一电脑多个ssh-key的管理
为什么有这种需求? 在我们开发过程中,可能会遇到使用同一台机器,既要向公司git服务器提交代码,也要向gitlib或者gitee等 git仓库提交代码,2个仓库设置的用户名信息,不一样,此时需要用到多 ...
- dubbo知识体系
Dubbo负载均衡 Random随机/ RoundRobin轮询/ LeastActive最少Dubbo缓存Dubbo集群容错 Dubbo回调 服务分组: group Dubbo异步调用 <du ...