【实验七】【使用规则实现数据完整性】

2023-10-27

数据完整性

约束的形式

下边通过一个总体说明约束怎样保证数据完整性的:

名称 作用 体现的完整性
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@窦孟园

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【实验七】【使用规则实现数据完整性】 的相关文章

随机推荐

  • iconfont 使用规则

    使用iconfont可以替代普通的单色小图标 无法替代有层次 渐变或多色的图标 这些还是要用位图来做 风险 需要修改的资源较多 基本所有页面要重新过一遍 可能影响到后续版本输出的进度 工作量预估 按各自负责模块内容 学铭2人日 瑞华3人日
  • 巨神奇,2013年的老Mac,竟直接装上macOS Ventura 13.1 Beta版

    写在前面 上期这篇文章 终于 老Mac可以跨级安装macOS Ventura了 中 我说了通过OpenCore Legacy Patcher可以跨级安装macOS Ventura 但却没给出一个切实的解决方法 本期我就说一下跨级安装的方法
  • 解决YOLOV5训练时P、R、mAP等值均为0的问题

    最近用YOLOV5训练自己的数据集 出现了训练失败的情况 比如box obj cls labels等均为nan或0 找了很多办法 其实就是cuda与PyTorch版本的问题 Epoch gpu mem box obj cls labels
  • 1603A - Di-visible Confusion

    1603A Di visible Confusion 题目 一个长度为N的数组从a1 a2 an 如果在存在不能被整除则可以删除 剩下的数变为a1 a2 an 1 求是否能使得数组为空 题解 每个数都会因为前一个数被删除而前移 所以遍历所有
  • 微信小程序如何实现将数据导出生成excel

    码字不易 有帮助的同学希望能关注一下我的微信公众号 Code程序人生 感谢 代码自用自取 这个需求也是我在接私活的时候遇到的 需求就是 要实现将指定数据库表的数据全部导出生成excel和按需导出 也就是导出全部数据 或者导出指定哪天的数据
  • Package opencv was not found in the pkg-config search path.

    安装好后opencv后执行下面这条语句的时候出错 pkg config cflags opencv Package opencv was not found in the pkg config search path Perhaps you
  • Git创建远程分支并提交代码到远程分支

    1 可以通过git branch r 命令查看远端库的分支情况 动图演示 选择项目右键选择 Git Bash Here 然后输入命令git branch r 2 从已有的分支创建新的分支 如从master分支 创建一个dev分支 但此时并没
  • 如何把itunes中的语音备忘录导出来

    2012 4 18 以前我把手机上的语音备忘录导出到itunes中 现在我想把在itunes中的语音备忘录导出来 如何导 己找到解决办法了 在语音备忘录中的语音文件 右键 选择 在资源管理其中显示
  • VSCode 结合Makefile设置调试方法

    添加构建 编译 链接等 任务 tasks json ctrl shift p打开命令行 输入Tasks Run task Create tasks json file from template 生成默认的tasks json文件 See
  • pythonturtle填充颜色函数_python turtle库颜色填充-绘制心形

    颜色填充函数 使用Turtle不仅可以画线条 也可以将画出的封闭线条进行填充 开始填充 begin fill 设定填充色 fillecolor 结束填充 end fill 实际操作 练习1 画心形import turtle import r
  • matlab中列平方求和公式,matlab求两列数据的平方和

    matlab怎样求矩阵每一行的平方和 有矩阵a则你所要求的矩阵b sum a a 2 附 这是点乘 就是矩阵每个对应位置的元素相乘sum a 2 是按行相加 得出的为列向量若sum a 是按列相加 得出的为行向量 基于matlab的数据正态
  • C语言的强制类型转换本质是什么?

    数据在计算机中是如何存储的 程序最终是要在计算机中运行的 中间产生的数据会暂存在内存 寄存器 cache中 也可以写到硬盘中保存起来 对计算机而言 数据没有什么变量类型 int char等 的区别 以字节为单位 计算机里存在的不是0就是1
  • AES128/ECB/PKCS5Padding 的实现

    AES的相关基础知识直接看WikiPedia 高级加密标准 附上 C C 可用代码 AES Cipher
  • 第15届全国大学生知识竞赛 2022ciscn初赛 部分wp

    Misc ez usb 1 键盘流量 USB协议数据部分在Leftover Capture Data域中 数据长度为八个字节 其中键盘击键信息集中在第三个字节中 如图 发现击键信息为0x06 即对应的按键为C 2 鼠标流量 USB协议鼠标数
  • Quoit Design (白话--分治--平面点对问题)

    Quoit Design Problem Description Have you ever played quoit in a playground Quoit is a game in which flat rings are pitc
  • php 获取图片的宽高,js如何获取图片宽高

    js获取图片宽高的方法 1 onload后在打印 2 通过complete与onload一起混合使用 3 通过定时循环检测获取 代码为 from check width img width height img heig 本教程操作环境 w
  • 二十天入门Java系列:第一天

    文章目录 第一天 01 01 计算机基础知识 计算机概述 了解 01 02 计算机基础知识 软件开发和计算机语言概述 了解 01 03 计算机基础知识 人机交互 了解 01 04 计算机基础知识 键盘功能键和快捷键 掌握 01 05 计算机
  • FPGA查找表

    一 查找表 Look Up Table 的原理与结构 采用这种结构的PLD芯片我们也可以称之为FPGA 如altera的ACEX APEX系列 xilinx的Spartan Virtex系列等 查找表 Look Up Table 简称为LU
  • 任意整数从0-x累加的巧妙算法

    巧妙的累加算法 include
  • 【实验七】【使用规则实现数据完整性】

    文章目录 数据完整性 约束的形式 规则与默认值的SQL语句 一 创建一个关于开课学期的规则 二 创建一个关于性别的规则 三 创建一个关于学分的规则 总结 Reference 数据完整性 约束的形式 下边通过一个总体说明约束怎样保证数据完整性