【实验七】【使用规则实现数据完整性】
文章目录
- 数据完整性
- 约束的形式
- 规则与默认值的SQL语句
- 一、创建一个关于开课学期的规则
- 二、创建一个关于性别的规则
- 三、创建一个关于学分的规则
- 总结
- Reference
数据完整性
约束的形式
下边通过一个总体说明约束怎样保证数据完整性的:
名称 | 作用 | 体现的完整性 |
---|---|---|
Primary key | 定义外键,保证被设定的列内不出现重复值 | 实体完整性 |
Unique | 不出现重复 | 实体完整性 |
Foreign key | 定义外键,保证表和表之间的一致性 | 参照完整性 |
Check | 定义列中数据的范围 | 自定义完整性 |
default | 为列的数据设定默认值 | 自定义完整性 |
1.主键
一个表中只能有一个主键,定义主键可以设定,也可以在代码中需要的时候加在相应的字段
2.unique(不重复)
数据表中非主键列在各行记录中不能出现相同的非空值,这时就需要有unique的特性,用法和主键一样
3.外键
是不同的表之间的关系,当其中有一些数据存在关系是可以建立外键,(可以避免出错)
用法:[constraint 约束名] foreign key (列名) reference 表名(列名)
4.check
限定列之间数据的参照关系 ,比如一个表中包含学生的“出生日期”和“入校日期”,入校日期肯定要晚于出生日期,这个时候可以用check来限定
用法:[constraint 约束名] check (关系式)
5.default(默认值)
当有非常多的相同数据要输入到数据表中的时候,可以设定一个默认值,这样减少工作量
用法:[constraint 约束名] default 常量表达式 for 字段名
说明:在没有单独拿出定义约束的时候可以省略“[constraint 约束名]”
规则与默认值的SQL语句
1.规则
规则的用途:验证数据的值是否处于一定的范围内,是否和特定格式相匹配 是否与制定列表中的输入相匹配
创建规则:create rule 规则名 as 规则的表达式(如果表达式中含有参数要加上@)
使用规则:sp_bindrule 规则名, ‘表名.列名’
查看规则:sp_helptext 规则名
解除规则: sp_unbindrule 规则名, ‘表名.列名’
删除规则:drop rule 规则名组
2.默认值
创建默认值:create default 默认名 as 表达式
使用默认值:sp_bindefault 默认名, ‘表名.列名’(注意英文字符)
查看默认值:sp_helpconstraint 表名
解除默认值:sp_unbindefault 默认名, ‘表名.列名’
删除默认值:drop_default 默认值名
一、创建一个关于开课学期的规则
每次设置规则前需要在对象资源管理器中选中“XSCJ”为当前数据库。
①打开“SQL Server Management Studio”窗口。
②单击“标准”工具栏上的“新建查询”按钮,打开“查询编辑器”窗口。
③在窗口内直接输入以下语句,创建规则,将“开课学期”列的值约束在1~8之间。
在【实验二】【创建表并输入数据】中可以看到当时通过SSMS设置过CHECK约束:
CREATE RULE kkxq_rule
AS @开课学期>=1 AND @开课学期<=8
GO
④单击“SQL编辑器”工具栏上的“分析”按钮,检查输入的T-SQL语句是否有语法错误。如果有语法错误,则进行修改。
⑤确保无语法错误后,单击“SQL编辑器”工具栏上的“执行”按钮。
⑥在“查询编辑器”窗口内输入以下语句,将所创建的规则绑定到“开课学期”列。
EXEC Sp_bindrule 'kkxq_rule', 'KC.开课学期'
GO
⑦单击“SQL编辑器”工具栏上的“执行”按钮。
⑧在“对象资源管理器”中,展开目标数据库中的“表”节点,鼠标右键单击目标表“KC”,在弹出的快捷菜单中选择“编辑前200行”命令,输入一行新记录,检验“开课学期”列值的约束情况。
查看约束:
因为在【实验二】【创建表并输入数据】中曾经设置过“开课学期”的约束,这里的效果不明显,添加数据检查约束:
注意数据中不要出现空格。
⑨使用SQL语句查看规则:
EXECUTE sp_helptext kkxq_rule
二、创建一个关于性别的规则
①在“查询编辑器”窗口内直接输入以下语句,为XSQK表的“性别”列创建规则,约束其值只能是“男”或“女”。
CREATE RULE sex_rule
AS @性别 in('男','女')
GO
②单击“SQL编辑器”工具栏上的“执行”按钮。
③在“查询编辑器”窗口内输入以下语句,将所创建的规则绑定到“性别”列。
EXEC Sp_bindrule 'sex_rule','XSQK.性别'
④单击“SQL编辑器”工具栏上的“执行”按钮。
⑤在“对象资源管理器”中,展开目标数据库中的“表”节点,鼠标右键单击目标表“XSQK”,在弹出的快捷菜单中选择“编辑前200行”命令,输入一行新记录,检验“性别”列值的约束情况。
这里查看【实验二】【创建表并输入数据】,当时并没有对性别进行约束。所以这里通过查看性别的属性进行检验:
在“常规”与“CHECK约束”并不能看到创建的规则,说明上面的查看方式也不对。这里依然通过添加数据检查约束:
⑥使用SQL语句查看规则:
EXECUTE sp_helptext sex_rule
三、创建一个关于学分的规则
①在“查询编辑器”窗口内直接输入以下语句,创建规则,要求“学分”列的值只能输入1~6之间的数字。实现步骤如下所述。
CREATE RULE xf_rule
AS @学分 like '[1-6]'
GO
②单击“SQL编辑器”工具栏上的“执行”按钮。
③在“查询编辑器”窗口内输入以下语句,将所创建的规则绑定到“学分”列。
EXEC sp_bindrule 'xf_rule','KC.学分'
GO
④单击” 执行”按钮。
⑤在“对象资源管理器”中,展开目标数据库中的“表”节点,鼠标右键单击目标表“KC”,在弹出的快捷菜单中选择“编辑前200行或者打开表”菜单项,输入一行新记录,检验“学分”列值的约束情况。
通过添加数据检查约束:
这里因为前五条数据是以前创建的,不受新规则影响。从“107”课程的“70”学分可以看出约束生效。
改进:针对实验五创建的数据将SQL语言改为如下,显示效果更佳。
CREATE RULE xf_rule
AS @学分 like '[10-60]'
GO
⑥使用SQL语句查看规则:
EXECUTE sp_helptext xf_rule
总结
规则和约束都可以保证数据完整性,二者的区别:
1:约束是基于表的操作
规则和默认值在创建了以后,他不属于某个表,只有在绑定了命令了以后才会发生关系。
2:一个约束只能对一个表的一个列产生作用,
规则和默认值可以绑定到多个表多个列中。
Reference
SQL Server学习进程(六)–数据完整性(规则、默认、完整性约束)/文CSDN@f斗牛士
数据库SQL server规则的创建、查看、修改和规则的绑定与松绑、删除/文博客园@Stay Hungry, Stay Foolish
数据库——怎样实现数据完整性/文CSDN@窦孟园
【实验七】【使用规则实现数据完整性】相关推荐
- 操作系统实验七 地址映射与共享(哈工大李治军)
实验七 地址映射与共享 实验目的 深入理解操作系统的段.页式内存管理,深入理解段表.页表.逻辑地址.线性地址.物理地址等概念: 实践段.页式内存管理的地址映射过程: 编程实现段.页式内存管理上的内存共 ...
- matlab 实验七 低层绘图操作,matlab实验内容答案
实验报实验报告告说说明 明 matlab 课课程程实验实验需撰写需撰写 8 个个实验报实验报告 每个告 每个实验报实验报告内容写每次告内容写每次 实验实验内容中内容中标标号呈黑体大号字号呈黑体大号字显 ...
- 操作系统真象还原实验记录之实验七:加载内核
操作系统真象还原实验记录之实验七:加载内核 对应书P207 1.相关基础知识总结 1.1 elf格式 1.1.1 c程序如何转化成elf格式 写好main.c的源程序 //main.c int mai ...
- C++实验七——类的继承(1)
实验报告 题目1 题目2 [实验名称] 实验七 类的继承(1) [实验内容] 题目1 以动物类为父类进行派生,设计可行的派生类,为派生类增加必要的成员,并对父类中的成员做适当调整,在主程序中对派生类的 ...
- 编译原理实验七:中间代码生成器
实现一门语言的中间代码生成器(4小时) 实验目的 通过本次实验,加深对中间代码生成的理解,学会编制中间代码生成器. 实验任务 用C.JAVA或其他语言编写一门语言的中间代码生成器,所选实现语言应与之前 ...
- 《Python课程设计》实验七
@Python课程设计 <Python课程设计>实验七Python 实验目的 理解 Python 正则表达式的含义 掌握正则表达式的语法 熟悉Python中的正则表达式re模块 了解正则表 ...
- 实验七 访问列表配置
实验七 访问列表配置 预备知识: ACL指令的放置顺序是很重要的. 当路由器在决定是否转发或者阻止数据报的时候,Cisco的IOS软件,按照ACL中指令的顺序依次检查数据报是否满足某一个指令条件. 当 ...
- c语言实验七实验报告,C语言实验七 数 实验报告.doc
C语言实验七 数 实验报告 C语言程序设计 实 验 报 告 实验题目 实验七 函数 实验目的 掌握函数定义的方法: 掌握函数实参与形参的对应关系,以及值传递的方式. 掌握函数的嵌套调用和递归调用的方法 ...
- c语言实验七 函数实验报告,C语言实验七函数实验报告.doc
C语言实验七函数实验报告 C语言程序设计 实 验 报 告 实验题目 实验七 函数 实验目的 掌握函数定义的方法: 掌握函数实参与形参的对应关系,以及值传递的方式. 掌握函数的嵌套调用和递归调用的方法: ...
- java实验 输入输出流_java实验七 输入输出流
有关java的实验和程序 实验七 输入输出流 一.实验目的和要求 目的: 1.掌握使用输入输出流进行文件的读写操作. 要求: 1.实验报告给出内容1,2的填充代码以及内容3的全部源代码. 二.实验内容 ...
最新文章
- vs怎么编译php文件,vscode怎么初始编译
- PHP Redis 集群封装类
- great English sentence:
- python网页结构分析_Python爬虫基础之网页组成解析
- 正则表达式之模式匹配的String方法
- Trick(十六)—— 随机数的生成
- R的数据可视化,各种图表,常用统计量计算
- python飞机大战源码以及素材资源
- Android 四大组件 -- service
- 论文阅读笔记 | 三维目标检测——AVOD算法
- 华为+android+root权限获取root,华为手机root权限获取方法
- 【全】常见的空气净化技术,你知道几种类型?
- photoshop导出png发生未知错误的解决方案,ps导出发生未知错误怎么解决
- 北航和北理工计算机专业哪个好,北理和北航哪个好?
- 公众号文章排版样式——隐藏样式
- ValueError: With n_samples=0, test_size=0.15 and train_size=None, the resulting train set will be em
- Flutter利用第三方插件Screen调节屏幕亮度
- JEPF快速发开平台
- 淘宝商品销量接口/淘宝商品销量监控接口/商品累计销量接口
- 全国计算机等级考试python(刷题软件)
热门文章
- 前端与移动开发-----CSS(三大特性+盒子模型原理)
- excel填充空格技巧
- 第十七章:线性动态规划
- 【Redis】到底是单线程还是多线程以及Redis为什么这么快?
- 神器 ffmpeg —— 操作视频,极度舒适
- 生物化学复习题II·核酸
- 帕金森病常用评测量表有哪些?收藏常笑医学网权威量表免费用
- Java版Word开发工具Aspose.Words基础教程:创建或加载文档
- outlook2013升级_如何仅在Outlook 2013中查看今天的RSS源
- Win7+Visual Basic V6.0精简版安装过程中的问题