美高梅官方网站3045-mgm6608美高梅app下载
浅谈SQL SECR-VVE科雷傲 二零零六 之援引完整性

浅谈SQL SECR-VVE科雷傲 二零零六 之援引完整性

作者:美高梅官方网站    来源:未知    发布时间:2020-01-19 21:59    浏览量:

参照完整性概念 参照完整性是对关系数据库中建立关联关系的数据表间数据参照引用的约束,也就是对外键的约束。准确地说,参照完整性是指关系中的外键必须是另一个关系的主键有效值,或者是NULL。参考完整性维护表间数据的有效性,完整性,通常通过建立外部键联系另一表的主键实现,还可以用触发器来维护参考完整性。基本概念与用法不多讨论,有两个困惑想问问大神们,1、如何防止误操作对建立了参照完整性的数据库进行误伤害?举例说:一个简单的学生成绩管理数据库包含学生表stu_id,stu_name课程表c_id,c_name分数表fs_id,stu_id,c_id如果删除了学生表stu_id=1的记录,那么分数表中对应stu_d=1的记录也随之会被触发参照完整性而删除,如果是对学生表的是误删除操作怎么防止?2、如何防止用户添加记录时的重复误操作?即把同一个学生录入了两次,因为主键是自增长的,逻辑上会形成两条记录两个人的结果。

数据库约束是为了保证数据的完整性而实现的一套机制,它具体的根据各个不同的数据库的实现而有不同的工具.
一般来说有以下几种实现方式:
1、检查约束:
通过在定义数据库表里,在字段级或者是在表级加入的检查约束,使其满足特定的要求.
比如以下的表定义:
CRATE TABLE student(
id serial,
name varchar(10),
scrore integer CHECK (scrore > 0));
定义分数不能小于0.
也可以在表级定义:
CHECK (字段1的条件(比如 字段1>100)
2、非空约束:
这个大家应该很熟悉了.直接在字段后面加上:NOT NULL.
3、唯一约束:
定义一个唯一约束但是它并不包括NULL值.直接在字段定义后加入UNIQUE即可定义一个唯一约束.
4、主键约束:
SQL 92建议在建立一个表时定义一个主键:它其实就是:唯一约束+非空约束.
5、外键:
所有约束里数这个约束最有意思了:比如说有这样一件事,你需要做一个学生查询的网页.那么为了方便,你将建立三个数据表:
一个是学生情况表:
CREATE TABLE student(
id serial primary key,
name varchar(10),
.
);
一个表是记录所开的课程
CREATE TABLE class(
class_id varchar(5) primary key,
describe varchar(20)
.
);
一个表是记录学生成绩的表:
CREATE TABLE score(
id integer references student,
class_id varchar(5) references class,
score integer CHECK (score > 0)
);
这个时候你会发现以下几件事:
如果你在成绩表里输入不存在的学生和课程,数据系统将拒绝.如果你要删除一个学生,但是他已经在成绩表里有记录,数据库将拒绝删除这个学生的记录.
那么我们现在来看,前面一个对我们是有利的,因为谁都不想一个学生无缘无故的有了一个成绩的记录,但是在删除的时候就会比较麻烦了,有时候我的确是想删除这个学生.那么我总不能在应用程序里照顾得那么周到吧.不要紧我们在定义数据表的时候只在外键那一样加入以下控制就OK了,我们来重新定义数据表 score
CREATE TABLE score(
id integer references student ON UPDATE CASCADE ON DELETE CASCADE,//我们希望在学生记录改变时自动改变分数记录,在删除学生级联删除分数记录
class_id varchar(5) references class ON UPDATE CASCADE ON DELETE
RESTRICT,//我们希望在改变课程时自动改变分数记录表里关于课程的引用,但是不希望删除课程时级联删除分数.
.
);
这样我们就可以很好做到数据完整了.

很久没有写点什么了,乘着空闲,把我最近在使用SQL SERVER 2005中的这一点有意思的新发现写出来分享一下。

 

 

 外键:

为什么想介绍SQL SERVER 2005 的引用完整性:

 如果显示这种错误是什么原因?

一是因为在SQL SERVER 2005中,添加了SQL SERVER 2000中没有的一些新功能,而这又很少被人们注意到;

图片 1

二是对于SQL SERVER数据库的初学者来说,引用完整性往往是他们难以理解和掌握的。

分析:

 

 1、看看主键 和 外键 的 数据类型 是不是设置的不一样

在SQL Server联机丛书中,将数据完整性解释如下:“存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。”强制数据完整性可确保数据库中的数据质量。

2、设置ref为外键,两个必要条件:一.ref不能为该表的主键;二.ref所参考的键必须为表的主键,所以添加主键约束即可。

 

3、ref的值需要在所参考的表的那一个主键中已经存在了,因此删除不符合的数据或者删除全部数据或者到被参考的表中添加相应有效的数据即可。

数据完整性分类

 

在SQL Server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种:

(1)只有InnoDB类型的表才可以使用外键,mysql默认是MyISAM,这种类型不支持外键约束

  • 实体完整性 
  • 域完整性 
  • 引用完整性 
  • 用户定义完整性

(2)外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;

引用完整性

(3)外键的作用:

引用完整性又称参照完整性。引用完整性用来保证主表和从表之间的数据一致性,它通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!

 

(4)建立外键的前提:

强制引用完整性时,SQL Server 将防止用户执行下列操作:
在主表中没有关联的记录时,将记录添加或更改到相关表中。
更改主表中的值,这会导致相关表中生成孤立记录。
从主表中删除记录,但仍存在与该记录匹配的相关记录。

两个表必须是InnoDB表类型。

也就是说,如果数据库的表之间为了确保数据的一致性,建立了引用完整性之后,则要求:
1、 在主表中,当其主键值被其从表所参照时,该行不能被删除也不允许改变;
2、 在从表中,不允许参照主表中不存在的主键值。
3、 如果主表的键值更改了,那么在整个数据库中,对该键值的所有引用的从表要进行一致的更改;

  ----如果我们想用外键那么我们该怎么修改 ---mysql如何修改表类型(表引擎)?

 

       修改 mysql 表类型的 sql 语句:

简单的示例:
建立一个student数据库,建立了学生表(Students)和成绩表(Score),Students表的学号字段SCode与Score表的StudentID字段建立了引用完整性约束(主外键关系):

       alter table 表名 type = MyISAM;

 

下一篇:没有了
友情链接: 网站地图
Copyright © 2015-2019 http://www.zen-40.com. mgm美高梅有限公司 版权所有