Chapter 7 Integrity(完整性), Views(视图), Security(安全性), and Catalogs(目录)

图片 1 

from Database Design to Physical Form

CREATE TABLE

integrity constraints (完整性约束)

CREATE VIEW

Security

The GRANT & REVOKE statements

Catalogs

Schemas

Introduction

  ->The DBA(数据库管理员) must begin by creating the tables
and constraints(约束) and loading the data. Impose(强加上) integrity constraints on the
columns 。

  ->Then provide views(视图) of the data, virtually
restructuring the physical tables into variant(不同的) table forms, to
simplify access to data.

  ->Provide security(安全性),
so that only authorized users are able to read or update certain
confidential(机密的) data.

  ->The structure of the various tables, views, and other objects
of a database are made available to the DBA through a set of
system-defined tables, called system
catalogs(系统目录).

 

Integrity(完整性)

  ->有限支撑数据完整性(主要指数据的正确与1致性)是数据库管理员的最主要职分之1。

  ->能够经过自律(Constraint)、规则(Rule)也许缺省值保险数据的完整性,也足以在动用程序层保险数据完整性(那是应用程序设计的主题材料),或通过触发器保障。

  ->数据完整性类型包罗:实体完整性、参照完整性和用户定义完整性  

    ->实体完整性(Entity Integrity)
:现实世界的实业是可分别的,即它们具有某种唯一性标记。相应地,关系模型中主键应作为唯1性标记。因而实体完整性规则规定基本关系的享有主键(Primary
Key)都无法取空值(NULL) 。

   
 ->参照完整性(Referential Integrity)
:参照完整性维护表与表之间的相关性,日常用“主键(Primary
Key)/外键(Foreign Key)”保障,个中Foreign
Key能够取NULL值,或取其参照表中Primary Key恐怕候选键的取值。

    ->用户定义的完整性(User_defined
Integrity
):针对某壹有血有肉数量的封锁规范,由应用环境决定。例如:有些属性具备缺省值、有个别属性必须取惟壹值(UNIQUE)、有些非主属性不能够取NULL值、有个别属性的取值范围在0~十0之间(CHECK)等等。

  ->数据完整性具体达成包蕴两类

    ->评释性数据全部性
:评释性数据总体性用约束(Constraint)、规则(Rule)
在数据库中提供有限补助,那是保障完整性的较好法子。它驻留在数据库内,编制程序轻易,开支小,能更集中管理和保险数据的一致性

    ->进度性数据完整性
:进程性数据完整性用触发器和应用程序代码保障,平日相比较复杂、耗费较大,但足以实行更多的政工规则。
平常,进度性数据完整性是注脚性数据完整性的互补

           图片 2

                 图片 3

           

-》》》完整性再演讲

     数占领所千丝万缕的数据类型,用来满足不一致的须求。实际利用中的数据也具备一定的取值范围,如年龄相当大于0,性别唯有孩子等。而表之间的沟通使相连的字段要保持1致和①体化。可是,实操无法保证插入和删除的数量都符合供给,不符合须要的操作极只怕会毁掉数据的完整性,对数据库的可信性和平运动作技巧造成威逼。

就此存放数据集的数据库必供给对数据表和列有所限制和行业内部,为此SQLServer系统使用一密密麻麻的法子来保养数据完整性。

数量的完整性:数据的完整性是指数据库中数据的不利和1致性,表内的数额不相冲突,表间的多少不相争辩,关联性不被毁损。

为此有了以下施行完整性的渠道:

一.        对列数据的垄断(monopoly):数据印证约束、暗许值约束、规则。

2.        对列的主宰:主键约束、唯1性约束、标志列。

三.        对表之间、列之间关系的决定:外键约束、数据印证约束、触发器、存款和储蓄进度。

这个路子得以遵从类别分为:约束、规则、暗许值、触发器、存款和储蓄进程。

封锁分为以下几点:

l        主键约束

主键:PSportageIMA奇骏Y
KEY,主关键字,用来界定列的多少颇具唯壹性且不为空,即这一字段的多寡未有再一次的多寡值且不能够有空值。各样表只可以有贰个主键,一般用来做标识。

l        外键约束

外键:FOREIGN
KEY,外键用来在多个表的数目里面创设连接,它能够是一列可能多列。叁个表可以有一个或许多少个外键。外键对应的是参考完整性,二个表的外键可以为空值,若不为空值则每贰个外键值必须等于另贰个表中主键的某部值。

l        标识列

能够活动编号的列称为标记列或IDENTITY约束。IDENTITY约束就是为那么些数值顺序递增的列准备的自律,自动实现数值的增加。各类表只好有二个标记列,标记数据无法由用户输入,用户只需求填写标记种子(标志列的第①个数据)和标记增量(依次扩张的数),系统自动生成多少并填入表。标识种子和标识增量都以非零整数,位数紧跟于等于10。私下认可两者均为一。

l        唯一性约束

又叫UNIQUE约束,在主键约束中也选取了唯壹性,不一致的是多个表中能够有多少个如此的绝无仅有性列,却不得不有1个主键。那里的唯一性列可以为空可是不得不有壹行数据为空。适用于不是主键但却照样供给具备唯壹性的字段。

l        非空约束

贰个列是不是同意有空值,正是此处的空和非空约束,即NULL与NOT
NULL约束。NULL正是同意为空,NOT
NULL就是不容许为空。NULL分化于0和“”,0和“”都意味着为该行有数量,而NULL是从未多少。

l        数据悉明约束

又称做CHECK约束,它通过给定条件(逻辑表明式)来检查输入数据是还是不是符合须要,以此来爱护数据完整性。

l        私下认可值约束

又称作DEFAULT约束。将常用的多寡值性以为私下认可值可以节省用户输入的时辰,在非空字段中定义暗中同意值可以减小不当发生。在骨子里行使中,暗许值还足以是结果能变的函数。

 

规则:

规则是独立的SQL
Server对象,跟表和视图一样是数据库的组成都部队分。规则的作用和CHECK约束类似,用于完成对数据值的考察。它能够提到到多个表,在数据库中有邮局插入、修改时,验证新数据是或不是吻合规则,是促成域完整性的主意之壹。规则在概念时并从未定义它的质量评定对象,而是在开创后绑定到指标来检验数据。

开创规则

CREATE RULE 规则名

AS

原则表明式

在那里的规则表达式使用逻辑表明式,表明式中要有三个@起首的变量,代表用户的输入数据,能够看成是顶替WHERE前边的列名。

平整在绑定之后才方可采用,规则的绑定需求时用系统存款和储蓄进程sp_bindrule.

USE 数据库名

Go

Sp_bindrule 规则名 表名.字段名

运用存储进度sp_help来查阅规则。

规则的特征(与CHECK的两样)

壹)       规则是SQL Server的靶子而CHECK是1种约束,是表定义的一某些。

贰)       CHECK的事先级要高于规则。

3)       三个列只可以采纳一个规则却能够选拔多少个CHECK约束。

四)       规则能够选择于八个列,CHECK约束只针对它定义的列。

5)       规则创立3回能够选拔频仍而CHECK约束必要频仍创造。

默认值:

CREATE DEFAULT 私下认可值名

AS 常亮表明式

与创造规则平等,暗中认可值的概念无法包涵列名,供给绑定到列或是其余数据库对象技术使用。叁个列只好绑定叁个暗许值

 

Definition 7.1.2 Column Constraint

       NOT NULL -If NOT NULL appears in a col_constr, then the DEFAULT
clause cannot specify NULL;

       CONSTRAINT-allows us to specify a name for each constraint other
than NOT NULL, so that we can later drop the constraint with an ALTER
Table statement.

       UNIQUE- It can be specified even if NOT NULL is not, and the
column is then constrained so that all non-null values in the table are
unique, but multiple nulls can exist for this column.       

       PRIMARY KEY -A column with the PRIMARY KEY column constraint is
implicitly defined to be NOT NULL and UNIQUE. The UNIQUE clause and
PRIMARY KEY clause cannot both be used for a column, although the
PRIMARY KEY clause and the NOT NULL clause can be used together.

       CHECK

       EXAMPLE

       图片 4

              图片 5

 

                      图片 6

                    触发器

                 

触发器的牵线

 

  1. 1

    触发器(trigger)是个奇特的囤积进度,它的推行不是由程序调用,也不是手工业运转,而是由事件来触发,当对3个表实行操作(
    insert,delete,
    update)时就会激活它推行,触发器平常用来抓好数据的完整性约束和事情规则等。其实往简单了说,正是触发器就是三个开关,负责灯的亮与灭,你动了,它就亮了,就这一个意思。

    图片 7

    END

触发器的归类

 

  1. 1

    DML( 数据操纵语言 Data Manipulation
    Language)触发器:是指触发器在数据库中发生DML事件时将启用。DML事件即指在表或视图中期维修改数据的insert、update、delete语句。

  2. 2

    DDL(数据定义语言 Data Definition
    Language)触发器:是指当服务器或数据库中产生(DDL事件时将启用。DDL事件即指在表或索引中的create、alter、drop语句也。

  3. 3

    登录触发器:是指当用户登陆SQL SE科雷傲VELX570实例建立会话时接触。

    END

DML触发器介绍

 

  1. 1

    在SQL SE福特ExplorerVE奥迪Q5二〇〇八中,DML触发器的落到实处采取三个逻辑表DELETED和INSERTED。那八个表是建立在数据库服务器的内部存款和储蓄器中,大家唯有只读的权柄。DELETED和INSERED表的组织和触发器所在的数据表的布局是一样的。当触发器实践到位后,它们也就会被自动删除:INSERED表用于存放你在操件insert、update、delete语句后,更新的记录。比如你插入一条数据,那么就会把那条记下插入到INSERTED表:DELETED表用于存放你在操作
    insert、update、delete语句前,你创设触发器表中数据。

  2. 2

    触发器可因此数据库中的相关表达成级联更换,能够强制比用CHECK约束定义的羁绊越来越复杂的牢笼。与
    CHECK
    约束分裂,触发器能够引用其余表中的列,例如触发器能够选用另三个表中的
    SELECT
    相比插入或更新的数目,以及施行其余操作。触发器也得以依据数据修改前后的表状态,再行选拔对策。三个表中的多个同类触发器(INSERT、UPDATE
    或 DELETE)允许使用四个不等的机关以响应同一个改变语句。

  3. 3

    还要,纵然触发器功效强大,轻易可信赖地完结无数繁杂的功能,为何又要慎用?过多触发器会促成数据库及应用程序的护卫困难,同时对触发器过分的借助,势必影响数据库的结构,同时扩充了保安的复杂性程序。

    END

触发器步骤详解

 

  1. 1

    首先,大家来品尝创立3个触发器,供给就是在AddTable那个表上开创二个Update触发器,语句为:

    create trigger mytrigger on AddTable
    for update

    图片 8

  2. 2

    下一场正是sql语句的局地了,首纵然只要发生update现在,须要触发器触发三个哪些操作。那里的意趣便是假如现身update了,触发器就会触发输出:the
    table was updated!—By 小猪也没办法。

    图片 9

  3. 3

    接下去大家来将AddTable表中的数据实行一个退换的操作:

    图片 10

  4. 4

    实行后,我们会发觉,触发器被触发,输出了我们设置好的文本:

    图片 11

  5. 5

    这触发器创建现在呢,它就正式开头工作了,那时候大家须要改造触发器的话,只须要将起来的create创设变为alter,然后修改逻辑就能够:

    图片 12

  6. 6

    只要咱们想查看某二个触发器的内容,直接运转:exec sp_helptext
    [触发器名]

    图片 13

  7. 7

    假若本身想查询当前数据库中有多少触发器,以有益自个儿进行数据库维护,只须要周转:
    select * from sysobjects where xtype=’TR’

    图片 14

  8. 8

    咱俩只要急需关闭或然开启触发器的话,只供给周转:

    disable trigger [触发器名] on database –禁止使用触发器

    enable trigger [触发器名] on database –开启触发器

    图片 15

  9. 9

    那触发器的效能虽大,不过假诺触及,恢复生机起来就相比较费心了,那大家就供给对数据开始展览爱抚,这里就要求用到rollback数据回滚~

    图片 16

  10. 10

    第8步的意趣正是查询AddTable表,假若内部存在TableName=newTable的,数据就回滚,触发器中止,这大家再开始展览一下测试,对AddTable表进行更动,发现,触发update触发器之后,因为有数据爱慕,触发器中止:图片 17

    图片 18

  11.  

 图片 19

图片 20

图片 21

图片 22

图片 23

图片 24

图片 25

图片 26

图片 27

图片 28

图片 29

图片 30

图片 31

 

 图片 32

图片 33

图片 34

图片 35

图片 36

图片 37

图片 38

图片 39

图片 40

图片 41

图片 42

图片 43

图片 44

图片 45

图片 46

图片 47

图片 48

图片 49

图片 50

图片 51

图片 52

图片 53

图片 54

图片 55

图片 56

图片 57

图片 58

图片 59

 

相关文章