蒙在股里 发表于 2015-1-16 22:14:01

MYSQL网页设计SQL Server同意反复空字段不空字段值唯...

人力成本上的节省,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.()
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技术内部-存储引擎,花了几个月啃四本书

透明 发表于 2015-2-11 08:19:45

一个是把SQL语句写到客户端,可以使用DataSet进行加工;

小女巫 发表于 2015-3-2 03:33:37

外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。

深爱那片海 发表于 2015-3-11 02:08:05

不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关

admin 发表于 2015-3-17 19:08:40

多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。

再现理想 发表于 2015-3-24 21:23:51

这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
页: [1]
查看完整版本: MYSQL网页设计SQL Server同意反复空字段不空字段值唯...