- 浏览: 1864041 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (514)
- OPEN (41)
- WARN (33)
- EXPER (16)
- RESOURCE (7)
- TOOL (4)
- DWR (10)
- Struts1.x (10)
- Ibtais (18)
- MyEclipse (30)
- Sql Server (64)
- Tomcat (7)
- APACHE (4)
- JSP (18)
- SERVLET (6)
- ENGLISH (0)
- ECSide (8)
- JasperReports (7)
- JAVA (24)
- JS (42)
- XML (26)
- CVS (8)
- Mind (1)
- JQUERY (2)
- IBATIS (6)
- PROJECT (0)
- STRUTS2 (0)
- PROXOOL (0)
- SPRING (4)
- Hibernate (0)
- SSI (0)
- JBPM (11)
- FLEX (3)
- JSON (2)
- GWT (1)
- jeecms v3 (1)
- Flash (2)
- DATA (1)
- ORACLE (3)
- 查询oracle 中逗号分隔字符串中所有值 (1)
最新评论
-
小小西芹菜:
GoEasy web三步轻松实现web实时推送1. 引入goe ...
服务器推送技术 java -
kg_1997:
这个方法太棒了,可以不用to_date函数,实在是棒!!!
java/oracle日期处理 -
wodesunday:
:idea:
SQL的分段统计查询语句 -
wodesunday:
引用
SQL的分段统计查询语句 -
BlueSkator:
讲的有点浅,没有深入进去
tomcat需要的重新发布和重启服务器的几种情况
浅谈SQL SERVER 2005 之引用完整性[转]
2008年12月02日 星期二 21:10
很久没有写点什么了,乘着空闲,把我最近在使用SQL SERVER 2005中的这一点有意思的新发现写出来分享一下。
为什么想介绍SQL SERVER 2005 的引用完整性:
一是因为在SQL SERVER 2005中,添加了SQL SERVER 2000中没有的一些新功能,而这又很少被人们注意到;
二是对于SQL SERVER数据库的初学者来说,引用完整性往往是他们难以理解和掌握的。
在SQL Server联机丛书中,将数据完整性解释如下:“存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。”强制数据完整性可确保数据库中的数据质量。
数据完整性分类
在SQL Server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种:
实体完整性
域完整性
引用完整性
用户定义完整性
引用完整性
引用完整性又称参照完整性。引用完整性用来保证主表和从表之间的数据一致性,它通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。
强制引用完整性时,SQL Server 将防止用户执行下列操作:
在主表中没有关联的记录时,将记录添加或更改到相关表中。
更改主表中的值,这会导致相关表中生成孤立记录。
从主表中删除记录,但仍存在与该记录匹配的相关记录。
也就是说,如果数据库的表之间为了确保数据的一致性,建立了引用完整性之后,则要求:
1、 在主表中,当其主键值被其从表所参照时,该行不能被删除也不允许改变;
2、 在从表中,不允许参照主表中不存在的主键值。
3、 如果主表的键值更改了,那么在整个数据库中,对该键值的所有引用的从表要进行一致的更改;
简单的示例:
建立一个student数据库,建立了学生表(Students)和成绩表(Score),Students表的学号字段SCode与Score表的StudentID字段建立了引用完整性约束(主外键关系):
注意:在SQL SERVER 2005中,建立主外键关系应该在从表中建立。为什么?因为在选择从表时,在SQL SERVER 2005默认会选择你所在的表,并且不能更改。(不包含在“数据库关系图”中建立)
如果在学生表(Students)中的某个学生,在成绩表(Score)中有相关的考试成绩,那么在学生表(Students)中删除该学生,将会报错:
消息 547,级别 16,状态 0,第 1 行
DELETE 语句与 REFERENCE 约束"FK_Score_Score"冲突。该冲突发生于数据库"student",表"dbo.Score", column 'StudentID'。
语句已终止。
是不是说我们在删除或者更改主表中的某条记录的时候,就一定要在整个数据库中,对该键值的所有引用的从表的记录进行相应一致的删除或更改呢?请接着往下看:
SQL SERVER 2005之引用完整性的新特性登场:
选择从表--> 右键“修改”--> 右键“关系”--> 选择一个关系名,就可以看到如下图所示:
INSERT 和 UPDATE 规范
删除规则和更新规则:
指定当数据库的最终用户尝试删除或更新某一行,而该行包含外键关系所涉及的数据时所发生的情况。
相关设置说明:
无操作:当在删除或更新主键表的数据时,将显示一条错误信息,告知用户不允许执行该删除或更新操作,删除或更新操作将会被回滚。
层叠:删除或更新包含外键关系中所涉及的数据的所有行。
说明:“层叠”在SQL Server 2000中又叫“级联”。
设置空:这是SQL Server 2005新增的功能。如果表的所有外键列都可以接受空值,则将该值设置为空。
说明:要将外键的删除规则和更新规则设为“设置空”,则该外键必须是可以为空的字段。
设置默认值:这是SQL Server 2005新增的功能。如果表的所有外键列都已定义了默认值,则将该值设置为该列定义的默认值。
说明:要将外键的删除规则和更新规则设置为“设置默认值”,该外键必须是有默认值的字段。
附加说明:
特地查看了一下SQL Server 2000,在它的“关系”中也包括了如下功能:
至于SQL Server 2005中的这些功能,在SQL Server 2000中用触发器应该可以实现,没有研究就不多言了。
在SQL Server 2000中的级联运行:
------------------------------------------- 引 用 ---------------------------------------------------------
级联运行(Cascaded operation)
触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。
例如,通过触发器对数据库中的相关表进行层叠更改:
在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。
2008年12月02日 星期二 21:10
很久没有写点什么了,乘着空闲,把我最近在使用SQL SERVER 2005中的这一点有意思的新发现写出来分享一下。
为什么想介绍SQL SERVER 2005 的引用完整性:
一是因为在SQL SERVER 2005中,添加了SQL SERVER 2000中没有的一些新功能,而这又很少被人们注意到;
二是对于SQL SERVER数据库的初学者来说,引用完整性往往是他们难以理解和掌握的。
在SQL Server联机丛书中,将数据完整性解释如下:“存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。”强制数据完整性可确保数据库中的数据质量。
数据完整性分类
在SQL Server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种:
实体完整性
域完整性
引用完整性
用户定义完整性
引用完整性
引用完整性又称参照完整性。引用完整性用来保证主表和从表之间的数据一致性,它通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。
强制引用完整性时,SQL Server 将防止用户执行下列操作:
在主表中没有关联的记录时,将记录添加或更改到相关表中。
更改主表中的值,这会导致相关表中生成孤立记录。
从主表中删除记录,但仍存在与该记录匹配的相关记录。
也就是说,如果数据库的表之间为了确保数据的一致性,建立了引用完整性之后,则要求:
1、 在主表中,当其主键值被其从表所参照时,该行不能被删除也不允许改变;
2、 在从表中,不允许参照主表中不存在的主键值。
3、 如果主表的键值更改了,那么在整个数据库中,对该键值的所有引用的从表要进行一致的更改;
简单的示例:
建立一个student数据库,建立了学生表(Students)和成绩表(Score),Students表的学号字段SCode与Score表的StudentID字段建立了引用完整性约束(主外键关系):
注意:在SQL SERVER 2005中,建立主外键关系应该在从表中建立。为什么?因为在选择从表时,在SQL SERVER 2005默认会选择你所在的表,并且不能更改。(不包含在“数据库关系图”中建立)
如果在学生表(Students)中的某个学生,在成绩表(Score)中有相关的考试成绩,那么在学生表(Students)中删除该学生,将会报错:
消息 547,级别 16,状态 0,第 1 行
DELETE 语句与 REFERENCE 约束"FK_Score_Score"冲突。该冲突发生于数据库"student",表"dbo.Score", column 'StudentID'。
语句已终止。
是不是说我们在删除或者更改主表中的某条记录的时候,就一定要在整个数据库中,对该键值的所有引用的从表的记录进行相应一致的删除或更改呢?请接着往下看:
SQL SERVER 2005之引用完整性的新特性登场:
选择从表--> 右键“修改”--> 右键“关系”--> 选择一个关系名,就可以看到如下图所示:
INSERT 和 UPDATE 规范
删除规则和更新规则:
指定当数据库的最终用户尝试删除或更新某一行,而该行包含外键关系所涉及的数据时所发生的情况。
相关设置说明:
无操作:当在删除或更新主键表的数据时,将显示一条错误信息,告知用户不允许执行该删除或更新操作,删除或更新操作将会被回滚。
层叠:删除或更新包含外键关系中所涉及的数据的所有行。
说明:“层叠”在SQL Server 2000中又叫“级联”。
设置空:这是SQL Server 2005新增的功能。如果表的所有外键列都可以接受空值,则将该值设置为空。
说明:要将外键的删除规则和更新规则设为“设置空”,则该外键必须是可以为空的字段。
设置默认值:这是SQL Server 2005新增的功能。如果表的所有外键列都已定义了默认值,则将该值设置为该列定义的默认值。
说明:要将外键的删除规则和更新规则设置为“设置默认值”,该外键必须是有默认值的字段。
附加说明:
特地查看了一下SQL Server 2000,在它的“关系”中也包括了如下功能:
至于SQL Server 2005中的这些功能,在SQL Server 2000中用触发器应该可以实现,没有研究就不多言了。
在SQL Server 2000中的级联运行:
------------------------------------------- 引 用 ---------------------------------------------------------
级联运行(Cascaded operation)
触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。
例如,通过触发器对数据库中的相关表进行层叠更改:
在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。
发表评论
-
ORACLE中使用递归查询 (
2012-12-27 16:35 940在数据库查询中常常会碰到要查询树形结构的数据,需要用一个字段的 ... -
函数与存储过程区别
2011-06-01 18:17 1267本质上没区别。只是 ... -
SQL Server2000安装常见问题
2011-05-25 14:15 1442一:解决安装sql时文件挂起的问题: (1)、点击“开始》运 ... -
MySQL语句优化的原则
2011-04-12 14:21 9611、使用索引来更快 ... -
转SQL-group by学习
2011-04-12 14:18 1238在select 语句中可以使用group by 子句将行划分成 ... -
SQL Select语句完整的执行顺序:
2011-04-12 14:15 1368SQL Select语句完整的执行顺序: 1、from子句组 ... -
SQL截取字符串(substring与patindex的使用)
2011-03-31 13:55 5674SQL截取字符串(substring与patinde ... -
SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL
2011-03-16 09:21 1277先看下面一个嵌套的查 ... -
SQL CHARINDEX (Transact-SQL)
2010-12-06 09:05 1444返回字符串中指定表达式的开始位置。 Transact-SQ ... -
SQL Server基本函数
2010-12-06 08:53 1575SQL Server基本函数 1.字符串函数 : ... -
sql 显示插入主键
2010-10-22 16:28 1263set identity_insert [T_ADMINTYP ... -
取小数
2010-10-22 16:12 1276使用这个方式来计算 SELECT convert(decima ... -
oracle 创建表空间
2010-10-12 11:28 1504一.创建表空间 CREATE SMALLFILE TABLES ... -
sql 约束大全
2010-09-27 16:28 1331--------添加主键约束(bookid作为主键) alt ... -
sql 主外键语法
2010-09-27 08:39 1701alter table dbo.t_commAtta ... -
在SQL Server中,关于with as使用介绍
2010-09-26 13:32 36018一.WITH AS的含义 ... -
procedure 存储过程多个返回测试
2010-09-01 10:26 1151create procedure test(@temp1 va ... -
sql 实现按月份,季度统计报表
2010-08-30 12:01 14898呵呵,我们在处理设计到日期统计时候经常会按照年度,季度,月份统 ... -
SQL Server DATEPART() 不能言
2010-08-30 11:29 1798今天做按月份,按年度,按季度统计报表,后来发现了最简单最可扩展 ... -
SQL 统计
2010-08-30 11:16 1431该死的mysql没有提供unix时间戳的专门处理函数,所以,如 ...
相关推荐
SQL 级联删除与级联更新的方法,需要的朋友可以参考一下
SQL server创建触发器实现级联删除
省市区三级级联sql,提供调整序号的多种数据库语法脚本
利用sql server自带的级联删除、级联更新功能,即其外键约束途径 alter table dbo.C add constraint FK_C_A_AID foreign key(AID) references dbo.A(AID) on delete cascade on update cascade go alter table dbo.C...
家庭两个无线路由器级联方式及设置
hibernate many-to-many级联保存,级联更新,级联删除
mysql级联更新和级联删除,区分有级联和没级联操作的区别之处
SQL多表级联触发器之deleted的使用课件PPT
qt下的sqlite3实现级联删除,在vs2010 + qt5.40 + win7下编译通过
MSserver自关联表的级联删除,使用触发器对自关联树形结构的表进行级联删除,文有几点教训,有编写脚本的初衷。
联系通过写存储过程进行级联删除,在实际开发中总结的
2015年最新最全的省市区街道级联查询
dwr实现2级级联菜单dwr实现2级级联菜单dwr实现2级级联菜单dwr实现2级级联菜单dwr实现2级级联菜单dwr实现2级级联菜单dwr实现2级级联菜单dwr实现2级级联菜单dwr实现2级级联菜单
省市区sql文件 单表
在数据库MySQL中利用外键实现级联删除、更新等方面的内容。有兴趣可以看看。。
LED屏BX-5Q15Q2级联设置说明书,仅用于级联模式!LED屏BX-5Q15Q2级联设置说明书,仅用于级联模式!
音视频-编解码-级联卷积编码和空时编码的研究.pdf
级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单
自己找了很久,这个是省市地3级,级联的sql语句可以用去MS SQLSever 直接执行生成