2008年06月09日
--表变量定义自动增加字段,定义主键
DECLARE @tmp2 table(id int IDENTITY(1,1),id2 int primary key(id))insert into @tmp2(id2) select top 100 id from book order by idselect * from @tmp2 order by id
--指定一个子查询,测试行是否存在
select t.id from book t where exists(select 1 from @tmp2 where id2=t.id )
阅读全文>发表于 @ 2008年06月09日 17:31:00|评论(loading...)|编辑|收藏
2008年06月01日
1. HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁。
2. NOLOCK:不添加共享锁和排它锁,当这个选项生效后,可能读到未提交读的数据或“脏数据”,这个选项仅仅应用于SELECT语句。
3. PAGLOCK:指定添加页锁(否则通常可能添加表锁)。
4. READCOMMITTED用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL Server 2000 在此隔离级别上操作。。
5. READPAST: 跳过已经加锁的数据行,这个选项将使事务读取数据时跳过那些已经被其他事务锁定的数据行,而不是阻塞直到其他事务释放锁,READPAST仅仅应用于READ COMMITTED隔离性级别下事务操作中的SELECT语句操作。
6. READUNCOMMITTED:等同于NOLOCK。
7. REPEATABLEREAD:设置事务为可重复读隔离性级别。
8. ROWLOCK:使用行级锁,而不使用粒阅读全文>
发表于 @ 2008年06月01日 19:10:00|评论(loading...)|编辑|收藏
2008年05月29日
SQL SERVER 2005 同步复制技术
以下实现复制步骤(以快照复制为例)
运行平台SQL SERVER 2005
一、准备工作:
1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户。
2.在SQL SERVER下实现发布服务器和订阅服务器的通信正常(即可以互访)。打开1433端口,在防火墙中设特例
3.在发布服务器上建立一个共享目录,作为发布快照文件的存放目录。例如:在D盘根目录下建文件夹名为SqlCopy
4.设置SQL 代理(发布服务器和订阅服务器均设置)本篇文章发表于www.xker.com(小新技术网)
打开服务(控制面板---管理工具---服务)
---右击SQLSERVER AGENT---属性---登录---选择“此帐户“
---输入或选择第一步中创建的WINDOWS 用户
阅读全文>
发表于 @ 2008年05月29日 15:18:00|评论(loading...)|编辑|收藏
SQLServer2000同步复制技术实现步骤
作者:gaojier 日期:2007-06-25
字体大小: 小 中 大
一、 预备工作
1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户
--管理工具
--计算机管理
--用户和组
--右键用户
--新建用户
--建立一个隶属于administrator组的登陆windows的用户(SynUser)
2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作:
我的电脑--D:\ 新建一个目录,名为: PUB
--右键这个新建的目录
--属性--共享
--选择"共享该文件夹"
--通过"权限"按纽来设置具体的用户权限,保证第一步中创建的用户(SynUser) 具有对该文件夹的所有权限
--确定
3.设置SQL代理(SQLSERVERAGENT)服务阅读全文>
发表于 @ 2008年05月29日 15:09:00|评论(loading...)|编辑|收藏
用强制订阅实现数据库同步操作
大量和批量的数据可以用数据库的同步机制处理
说明:为方便操作,所有操作均在发布服务器(分发服务器)上操作,并使用推模式阅读全文>
发表于 @ 2008年05月29日 15:07:00|评论(loading...)|编辑|收藏
前言
本文通过一个Bug的分析、解决,概述了使用Lumigent Log Explorer对SQL Server的事务日志进行分析的方法,以及常见的数据库误操作后的恢复、撤销方法
Bug描述
网站的文章模块有一个评分的功能:
- 用户选择1-5分,点击提交后,文章的评分次数(Stars) + 1、总分(StarTotal) + 分数、平均分(StarAvg) = 新总分 / 新评分次数
- 文章页面显示用户的平均分以及评分次数
评分功能中用户最多打5分,最少打1分,某日忽然发现有的文章平均分竟然大于5,很不可思议。出现这个问题,大致的原因大不过有:
- 实现评分逻辑的页面没有验证传入的分数是否合法、有些用户直接提交他们想要的分数来作弊;
- 评分逻辑无误,但计算平均分的算法错误
经检查,评分模块不仅验证了分数范围,而且验证了访问来源,用户根本不可能通过提交他们想要的分数达到修改平均分的目的;平均分算法也没有问题。
这就奇怪了,只能先查看一下SQL Ser阅读全文>
发表于 @ 2008年05月29日 11:04:00|评论(loading...)|编辑|收藏
2008年05月28日
指定组或聚合的搜索条件。HAVING 只能与 SELECT 语句一起使用。HAVING 通常在 GROUP BY 子句中使用。如果不使用 GROUP BY 子句,则 HAVING 的行为与 WHERE 子句一样。
以WHERE 不同的地方在于,having可以在条件里面带聚合函数 sum ,count
比如:
select * from book where authorid in (select authorid from book group by authorid having sum(renqi)>10000 )
阅读全文>发表于 @ 2008年05月28日 17:42:00|评论(loading...)|编辑|收藏
2008年05月26日
SQL Server 2005中解决死锁问题
数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法。
将下面的SQL语句放在两个不同的连接里面,并且在5秒内同时执行,将会发生死锁。
use Northwind
begin tran
insert into Orders(CustomerId) values(@#ALFKI@#)
waitfor delay @#00:00:05@#
select * from Orders where CustomerId = @#ALFKI@#
commit
print @#e阅读全文>
发表于 @ 2008年05月26日 16:59:00|评论(loading...)|编辑|收藏
锁的概述
一. 为什么要引入锁
多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:
丢失更新
A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统
脏读
A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致
不可重复读
A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致
并发控制的主要方法是封锁,锁就是在一段时间内禁止用户做某些操作以避免产生数据不一致
二 锁的分类
锁的类别有两种分法:
1. 从数据库系统的角度来看:分为独占阅读全文>
发表于 @ 2008年05月26日 16:57:00|评论(loading...)|编辑|收藏