xml地图|网站地图|网站标签 [设为首页] [加入收藏]
数据删除设计,返回第一个不是null的值澳门新葡
分类:数据库

转自:http://www.maomao365.com/?p=4732

Coalsece 返回第一个不是null的值

  

select top 5 [objname]

      ,[objjc]

      ,[objorder]

      ,[objid]

      ,[parentid]

      ,[grade]

      ,[type]

      ,[href]

      ,coalesce( [rel],0) rel

      FROM [Menu]



  select top 5 [objname]

      ,coalesce( [rel],'0') rel

      FROM [Menu]

     order by NEWID()



       select top 5 [objname]

      , rel

      FROM [Menu]

     order by NEWID()

 

在设计一个新系统的Table Schema的时候,不仅需要满足业务逻辑的复杂需求,而且需要考虑如何设计schema才能更快的更新和查询数据,减少维护成本。

一、mssql sql hashbytes 函数简介

模拟一个场景,有如下Table Schema:

hashbytes函数功能为:返回一个字符,
通过 MD2、MD4、MD5、SHA、SHA1、SHA2_256、SHA2_512方式加密后的返回值

Product(ID,Name,Description)

hashbytes(‘参数1’,’参数2’)

在设计思路上,ID是自增的Identity字段,用以唯一标识一个Product;在业务逻辑上要求Name字段是唯一的,通过Name能够确定一个Product。业务上和设计上有所冲突在所难免,解决冲突的方法其实很简单:将ID字段做主键,并创建clustered index;在Name字段上创建唯一约束,保证Product Name是唯一的。

参数1:
输入加密类型 例:MD5
参数2:
输入待加密的字符串(加密字符串最大值为 8000字节)
返回值:
返回值最大为8000字节
注意事项:
当输入加密类型,异常时,返回NULL

这样的Table Schema 设计看似完美:ID字段具有做clustered index的天赋:窄类型,自增,不会改变;Name上的唯一约束,能够满足业务逻辑上的需求。但是,如果业务人员操作失误,将Product 的 Name 写错,需要将其删除,最简单的方式是使用delete 命令,直接将数据行删除,但是这种方式带来的隐患特别大:如果业务人员一不小心将重要的数据删除,那么,恢复数据的成本可能非常高。如果数据库很大,仅仅为恢复一条数据,可能需要N个小时执行还原操作。如何设计Table Schema,才能避免在维护系统时出现被动的情况?

二、mssql sql hashbytes 举例应用

delete Product
where Name='xxx'

例1:

设计目的:在短时间内恢复被误删除的数据,以使系统尽快恢复

   DECLARE @info nvarchar(4000);  
SET @info = CONVERT(nvarchar(4000),'www.maomao365.com');  
SELECT HASHBYTES('SHA1', @info);   ---返回采用SHA1加密
SELECT HASHBYTES('MD5', @info);    ---返回采用MD5加密
SELECT HASHBYTES('MD2', @info);    ---返回采用MD2加密

在实际的产品环境中,数据删除操作有两种方式:软删除和硬删除,也称作Logic Delete 和 Physical Delete。硬删除是指使用delete命令,从table中直接删除数据行;软删除是在Table Schema中增加一个bit类型的column:IsDeleted,默认值是0,设置IsDeleted=1,表示该数据行在逻辑上是已删除的。

例2:

Product(ID,Name,Content,IsDeleted,DeletedBy)

 

软删除实际上是一个Update 操作,将IsDeleted字段更新为1,在逻辑上将数据删除,并没有将数据行从物理上删除。使用软删除,能够保留有限的数据删除的历史记录,以便audit,但是,这可能导致外键关系引用被逻辑删除的数据;如果历史记录太多,这又会导致数据表中有效数据行的密度降低,降低查询速度。

     create table A(info1 varchar(30))

insert into A (info1)values('www.maomao365.com')
insert into A (info1)values('猫猫小屋')
insert into A (info1)values('mssql教程专用')
insert into A (info1)values('mssql函数用法简介') 

select HASHBYTES('Md5',info1) as [md5加密], 
HASHBYTES('SHA1',info1) as [SHA1加密],
info1 from A 

truncate table A
drop table A 

1,能够快速恢复被误删除的数据

本文由澳门新葡亰手机版发布于数据库,转载请注明出处:数据删除设计,返回第一个不是null的值澳门新葡

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文