技术标签: 数据库
在上一篇文章中,我们已经对完整性约束有了一定的概念,并且做了分类。
实验操作放在另外一篇文章
分类: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方式
将所有的外码值设置为空值。
这里是用PHP写的几个基础算法,算法的重要性貌似对于PHP程序员不怎么重要,其实是非常重要的,经典名句:算法+数据结构=程序。作为一名真正的高级PHP程序员,我认为应该熟悉C,如果你想成为真正的程序员,请好好学C,学好数据结构与算法。这里仅仅只是几个基础算法,还有很多东东要学……1、首先来画个菱形玩玩,很多人学C时在书上都画过,咱们用P...
写在前面:本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。一、PN结在同一硅片上将 P型半导体与 N型半导体结合在一起,那么它们之间的交界面就形成 PN结;同时,PN结具有单向导电性,正是因为这一特点,所以才构造出二极管这样的电子元件PN结的状态(导通 or 截止):当 PN结外加正向电...
Demo main.m文件 #import <Foundation/Foundation.h>#import "Wangyuyan.h"int main(int argc, const char * argv[]) { @autoreleasep...
废话不说,上实例 使用 jfinal最新版本 1.4 的 blog demo. 如果使用springrain 该怎么做呢? 总共分三步: 1.编写blog.sql 建表语句,花费2分钟左右时间 2.执行代码生成器,gen blog 并把生成文件拷贝到项目. di_car/freema...
C 标准库 - &lt;string.h&gt;描述C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字符到存储区 str1。声明下面是 memcpy() 函数的声明。void *memcpy(void *str1, const void *str2, size_t ...
在用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的教程请去点击这里从服务器里安装node环境,自行百度话不多说直接上图先创建项目从git上拉代码构建触发器 一会会用到把token生成shell命令#!/bin/bash -ilex#cd /root/.jenkins/jobs/starsPark-backStage/workspace #进入starsPark-backStage项目目录cnpm ...
#系列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克隆对象实现方法详解| 时间:2013-09-05 20:25:24 | 阅读数:60375[导读] 在jquery中实现克隆我们只要使用jQuery extend({}, oldObject)这样就可以了,并不像有些网友写了几十行也只能实现这个功能。在What is the most efficient way to clone a JavaScript
#!/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