仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1008|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页设计外键开关

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:32:15 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。
比来在做假材料时常常必要删除一些表中的内容。可是:

设置外键后,想删除表中的数据没法删除,这时候需删除外键后重修,
或找到外键后用altertable表名nocheck外键名 来临时屏障外键,然后删除。
爽性写个存储历程,设置外键的开关。
execfk_switch表名,0屏障外键
execfk_switch表名,1重启外键

/*Usage:
execfk_switchtableName,0
deletetableNamewherefieldName=abc
--truncatetabletableName
execfk_switchtableName,1
*/
Createprocfk_switch@tableNamevarchar(20),@statusbit
As
declare@fkvarchar(50),@fktablevarchar(20)
declare@svarchar(1000)
declarecurcursorfor
selectb.nameasfkname,c.nameasfktablename
fromsysforeignkeysa
joinsysobjectsbona.constid=b.id
joinsysobjectscona.fkeyid=c.id
joinsysobjectsdona.rkeyid=d.id
whered.name=@tableName
opencur
fetchnextfromcurinto@fk,@fktable
while@@fetch_status=0
begin
if@status=0
begin
set@s=altertable+@fktable+nocheckconstraint+@fk
print@s
end
else
begin
set@s=altertable+@fktable+checkconstraint+@fk
print@s
end
exec(@s)
fetchnextfromcurinto@fk,@fktable
end
closecur
deallocatecur

go



--以下为测试:
createtableA(idintprimarykey)
go
createtableB(idint,
constraintfk_B_Aforeignkey(id)referencesA(id))
go
createtableC(idint,
constraintfk_C_Aforeignkey(id)referencesA(id))
go
insertAvalues(1)
insertBvalues(1)
insertCvalues(1)

--1:
deletea
/*****
服务器:动静547,级别16,形态1,行1
DELETEstatementconflictedwithCOLUMNREFERENCEconstraintfk_B_A.Theconflictoccurredindatabasepubs,tableB,columnid.
Thestatementhasbeenterminated.
*******/

--2:
begintran
execfk_switchA,0
deleteA
execfk_switchA,1
rollback
/*
altertableBnocheckconstraintfk_B_A
altertableCnocheckconstraintfk_C_A

(所影响的行数为1行)

altertableBcheckconstraintfk_B_A
altertableCcheckconstraintfk_C_A
*/

--3:扫除测试表
droptableA,B,C
go




在ORDERBY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。(虽然如此,在涉及多个数据表查询里,即使有索引可用,那些索引在加快ORDERBY方面也没什么作用)。
小妖女 该用户已被删除
9#
发表于 2015-3-23 17:27:15 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-17 02:39:30 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
简单生活 该用户已被删除
7#
发表于 2015-3-9 22:31:51 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
再现理想 该用户已被删除
6#
 楼主| 发表于 2015-2-28 10:37:46 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
山那边是海 该用户已被删除
5#
发表于 2015-2-10 00:14:07 | 只看该作者
相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-4 13:37:27 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
若天明 该用户已被删除
板凳
发表于 2015-1-26 07:11:10 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
只想知道 该用户已被删除
沙发
发表于 2015-1-19 16:17:26 | 只看该作者
如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表