仓酷云

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

[学习教程] MYSQL网页设计SQL Server同意反复空字段不空字段值唯...

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:14:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
人力成本上的节省,MySQL的用户Spacemonkey实验室的首席执行官MitchPirtle如此表示:“维护MySQL使得你不需要一个年薪15万美元的DBA。</p>明天同砚向我提了一个成绩,我以为蛮成心思,现纪录上去人人切磋下。成绩是:在一个内外面,有一个同意为空的字段,空是能够反复的,可是不为空的值必要独一。
表布局以下面代码创立
以下为援用的内容:
CREATETABLEtest_tb
(
TestIdintnotnullidentity(1,1)primarykey,
Captionnvarchar(100)null
);
GO
办理计划1:
关于这个成绩,人人的第一个设法多是:在Caption这个字段下面加一个独一键不就能够了吗?好,我们按着这个思绪做下往,先创立独一索引。
以下为援用的内容:
CREATEUNIQUENONCLUSTEREDINDEXun_test_tb
ONtest_tb(Caption)
GO
索引创立好了,我们来测试下效果
以下为援用的内容:
INSERTINTOtest_tb(Caption)
VALUES(null)
GO
INSERTINTOtest_tb(Caption)
VALUES(null)
GO
运转以后我们会收到上面的毛病信息:
以下为援用的内容:
动静2601,级别14,形态1,第1行
不克不及在具有独一索引un_test_tb的工具dbo.test_tb中拔出反复键的行。
语句已停止。
以是该办理计划是不可的。
办理计划2:
增加束缚,让SQLServer在拔出数据的时分,先考证下已无数据中是不是有如今要拔出的这个值。因为这个束缚不是复杂的一个运算,因而我们先创立一个函数,然后再在束缚中挪用这个函数。
创立考证逻辑函数:
以下为援用的内容:
CREATEFUNCTION[dbo].[fn_CK_test_tb_Caption]()
RETURNSBIT
AS
BEGIN
IF(EXISTS(
SELECT1
FROMtest_tbASa
WHERE(CaptionISNOTNULL)ANDEXISTS
(SELECT1ASExpr1
FROMtest_tb
WHERE(CaptionISNOTNULL)AND(Caption=a.Caption)AND(a.TestIdTestId))
))
RETURN0

RETURN1
END
GO
在束缚中援用函数:
以下为援用的内容:
ALTERTABLEtest_tb
ADDCONSTRAINTCK_test_tb_CaptionCHECK(dbo.fn_CK_test_tb_Caption()=1)
GO
如今来测试下效果。先来测试NULL值
以下为援用的内容:
INSERTINTOtest_tb(Caption)
VALUES(null)
GO
INSERTINTOtest_tb(Caption)
VALUES(null)
GO
SELECT*FROMtest_tb
GO
能够乐成运转,并且也出了多举动NULL的情形。如今再来测试不为空的拔出情形。
以下为援用的内容:
INSERTINTOtest_tb(Caption)
VALUES(NAAA)
GO
INSERTINTOtest_tb(Caption)
VALUES(NBBB)
GO
INSERTINTOtest_tb(Caption)
VALUES(NBBB)
GO
SELECT*FROMtest_tb
GO
了局是在第三条语句的时分报错了,表中的Caption字段也有‘AAA’和‘BBB’了,这也恰好是我们要的了局。
以是办理计划2是准确的。可是为了这么一个小小功效,就写这么长一段器材是否是太烦琐了呢?我们来看上面的办理计划。
办理计划3:(只合用于SQLServer2008)
SQLServer2008中有了一个文雅的办理计划,那就是选择索引。选择索引是一种经由优化的非会萃索引,特别合用于涵盖从界说完美的数据子会合选择数据的查询。选择索引利用选择谓词对表中的部分行举行索引。有了选择索引,我们只必要写一条语句就到达下面的效果。
以下为援用的内容:
CREATEUNIQUENONCLUSTEREDINDEXun_test_tb
ONtest_tb(Caption)
WHERECaptionisnotnull
GO
再用下面的一些测试语句来测试的话,会发明完整是到达了我们的请求。这个计划的独一弱点就是该语句只要SQLServer2008撑持。不晓得列位有无又文雅又合用于各个版本的SQLServer的办理计划,看不堪见教。(博客园
MySQL对硬件的较低要求是其最大的优势之一,不过需要注意的是:内存越多越好,因为所有的重要数据存储都在内存中完成。
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-19 05:28:45 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
小魔女 该用户已被删除
板凳
发表于 2015-1-27 09:10:27 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
海妖 该用户已被删除
地板
发表于 2015-2-5 08:21:51 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
透明 该用户已被删除
5#
发表于 2015-2-11 08:19:45 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
小女巫 该用户已被删除
6#
发表于 2015-3-2 03:33:37 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
深爱那片海 该用户已被删除
7#
发表于 2015-3-11 02:08:05 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
admin 该用户已被删除
8#
发表于 2015-3-17 19:08:40 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
再现理想 该用户已被删除
9#
发表于 2015-3-24 21:23:51 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-4 10:56

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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