数据库5之完整性约束的实现_如何实现完整性约束_朝一爱学习的博客-程序员秘密

技术标签: 数据库  

在上一篇文章中,我们已经对完整性约束有了一定的概念,并且做了分类。

实验操作放在另外一篇文章

分类:1.实体完整性约束2.域完整性约束3.

那么怎么实现完整性约束呢?

1.完整性规则的定义:通过SQL,也可以SSMS交互式创建

2.(运行时)进行完整性规则的检查

一、实体完整性约束

1.主码(primary key)约束

-->可以定义为表级约束条件,也可以定义为列级约束条件

区别:


2.唯一(unique)约束

对于指定的一个属性或者属性集合,不允许出现重复的值。

注意区别primary key约束

-->一个数据表只能创建一个primary key约束(可以有多个列,但是primary key只能出现一次),但一个表中可以根据需要对不同的列创建若干个unique约束(unique约束和primary key约束一样也能在表级约束定义)

-->primary key的字段取值不能为null,因为它是区分该表中此记录和其它记录的一个键值。而unique字段的值可以取null

-->建立主键的目的是为了让外键使用,所以不允许存在空值

-->一般创建primary key约束的时候,系统会自动产生一个索引,默认类型为簇索引。创建unique约束时,系统会创建一个unique索引,索引的类型默认为非簇索引。但是也可以指定创建。


****************************************************************************************************************************

索引:根据索引可以找到对应的物理地址,从而更容易找到需要的数据的地址。例如查字典,找到偏旁,再找要查的字。

簇索引:顺序结构和物理结构一致的一种索引,查字典,通过拼音查找该字,而拼音是按照ABCDEF排序的,对应的字也是按照ABCDEF排序。

非簇索引:顺序结构和物理结构不一致的一种索引。通过部首查字法来查找该字,没有一定的顺序。

****************************************************************************************************************************

注意,如果表中已经有数据,建立主键/唯一约束可能会出错。

二、域完整性约束

1.非空(not null)约束

-->声明某个属性不能取空值

2.缺省(default)约束

-->如果列中没有输入值就会填充默认值。

非空约束只在列级约束条件中定义,不能在表级约束条件中定义。


-->修改表创建默认约束,建立好一张表之后,通过修改该表来创建一个默认约束

表的创建:

修改表添加默认约束:


3.检查(check)约束

一个字段的输入必须满足check约束的条件,否则不能正常输入。例如:sex只能取男或女,不能取其他的值,此时可以定义一个check约束来约束当前列的取值。注意:timestamp和identity两种类型的字段不能定义check约束。

两种定义方法:


具体的实验操作和步骤以及注意事项会另外写一篇文章

三、参照完整性约束

1.外键(foreign key)约束

-->cascade级联删除和级联更新(以下表为例,班级表是主表,学生表是从表)

级联删除就是删除主键表数据的同时,外键表的数据也同时删除。


级联更新就是更新主键表数据的同时,外键表的数据也同时更新。


-->no action方式

不允许删除,将不会对表产生影响。


-->set null方式

将所有的外码值设置为空值。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41086461/article/details/80798805

智能推荐

PHP写的几个基础算法 (转载)_weixin_33775572的博客-程序员秘密

这里是用PHP写的几个基础算法,算法的重要性貌似对于PHP程序员不怎么重要,其实是非常重要的,经典名句:算法+数据结构=程序。作为一名真正的高级PHP程序员,我认为应该熟悉C,如果你想成为真正的程序员,请好好学C,学好数据结构与算法。这里仅仅只是几个基础算法,还有很多东东要学……1、首先来画个菱形玩玩,很多人学C时在书上都画过,咱们用P...

二极管的认识_为什么二极管pn结面积大小对应用途_夏沫の浅雨的博客-程序员秘密

写在前面:本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。一、PN结在同一硅片上将 P型半导体与 N型半导体结合在一起,那么它们之间的交界面就形成 PN结;同时,PN结具有单向导电性,正是因为这一特点,所以才构造出二极管这样的电子元件PN结的状态(导通 or 截止):当 PN结外加正向电...

类和对象_chue6943的博客-程序员秘密

Demo main.m文件 #import <Foundation/Foundation.h>#import "Wangyuyan.h"int main(int argc, const char * argv[]) { @autoreleasep...

springrain vs jfianl的开发对比_chunchenjin2650的博客-程序员秘密

废话不说,上实例 使用 jfinal最新版本 1.4 的 blog demo. 如果使用springrain 该怎么做呢? 总共分三步: 1.编写blog.sql 建表语句,花费2分钟左右时间 2.执行代码生成器,gen blog 并把生成文件拷贝到项目. di_car/freema...

C 库函数 - memcpy()_memcpy src+1_thebestleo的博客-程序员秘密

C 标准库 - <string.h>描述C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字符到存储区 str1。声明下面是 memcpy() 函数的声明。void *memcpy(void *str1, const void *str2, size_t ...

tf.data.Dataset.map()函数的理解_minopus的博客-程序员秘密

在用dataset读取tfrecord的时候,看到别人的代码里面基本都有tf.data.Dataset.map()这个部分,而且前面定义了解析tfrecord的函数decord_example(example)之后,在后面的的map里面直接就dataset.map(decord_example)这样使用,并没有给example赋值。具体代码在这里:def decode_example(example, resize_height, resize_width, label_nums): dics=

随便推点

jenkins+gitlab+vue进行自动化构建部署项目打包_名字叫孙冉的博客-程序员秘密

安装jenkins的教程请去点击这里从服务器里安装node环境,自行百度话不多说直接上图先创建项目从git上拉代码构建触发器 一会会用到把token生成shell命令#!/bin/bash -ilex#cd /root/.jenkins/jobs/starsPark-backStage/workspace #进入starsPark-backStage项目目录cnpm ...

数据结构_Hellowongwong的博客-程序员秘密

#系列from pandas import Seriesa=Series([1,2,3])print(a)from pandas import Seriesa=Series([1,2,3],index=[1,2,3])print(a)from pandas import Seriesa=Series([1,2,3],index=['a','b','c'])p...

jQuery.extend克隆对象实现方法详解_faker_guo的博客-程序员秘密

jQuery.extend克隆对象实现方法详解| 时间:2013-09-05 20:25:24 | 阅读数:60375[导读] 在jquery中实现克隆我们只要使用jQuery extend({}, oldObject)这样就可以了,并不像有些网友写了几十行也只能实现这个功能。在What is the most efficient way to clone a JavaScript

ansible自动安装并配置ssh免密环境shell脚本_cexia5623的博客-程序员秘密

#!/bin/bash####### centos 7.6clearUSER=rootPASSWD=amunlinuxPUBDIR=/root/.sshcat > ~/prompt-ans.txt << EOF####### 如果需要配置服务器数量过多,最好在外部保存到ip-list文件内,易于美观####### 如果.ssh/ 下存在文件,需要删除后再次执行脚本,不想删除...

不开辟新空间,两个有序单链表合并为一个有序单链表_两榜进士的博客-程序员秘密

/*链表*/#include typedef struct node{    int data;    struct node *next;}*Listlink;/*后插法创建单链表*/void hou_create(Listlink *head,int n){    int i;    Listlink p,q;    *head=(Listlin

推荐文章

热门文章

相关标签