我使用 SQL Server 已经很长时间了,当表之间存在逻辑连接时,我总是使用 FK 和索引
例子:
MyTable1
{
ID BIGINT IDENTITY (1, 1) NOT NULL,
SomeData NVARCHAR(255) NOT NULL,
MyFK BIGINT NULL -- this is a FK to MyTable2.ID
}
MyTable2
{
ID BIGINT IDENTITY (1, 1) NOT NULL,
SomeData NVARCHAR(255) NOT NULL
}
Run Code Online (Sandbox Code Playgroud)
现在问题来了,当我在 MyTable1 上执行一些更新 MyFK 的批量更新操作,同时对 MyTable2 执行插入语句时,我们会挂起直到发生超时或更新完成并释放锁。
据我所知,在插入具有 FK 的表时,数据库引擎需要锁定相关表以验证 FK,这就是问题的根源。
我试图解决问题的事情:
删除了表http://msdn.microsoft.com/en-us/library/ms184286%28v=sql.105%29.aspx上的锁升级选项
将索引上的锁更改为基于行而不是基于页面 http://msdn.microsoft.com/en-us/library/ms189076%28v=sql.105%29.aspx
这两种解决方案都导致我陷入僵局和糟糕的性能。
当我删除 FK 时,一切正常,但存在数据损坏的风险。
问题:
sql-server foreign-keys sql-server-2008-r2 database-deadlocks
我们正在设计一个新组件并考虑使用命令设计模式。
我们有两种主要类型的命令来实现我们的IOurCommand接口(其他命令将从中继承)。
问题是第一个命令CommandDoUpdates不需要返回任何值,而第二个命令CommandGetData是获取数据,所以它需要返回List一些对象(List<DataRow>)
我们正在考虑处理这种情况的事情:
CommandDoUpdates.List作为具体命令的成员 - 潜在的解决方案,但由于其他原因(浅拷贝与深拷贝等)使我们的生活变得更加艰难。这篇文章是关于命令是否应该返回值/状态的好读物。这是相关的,因为在 GoF 书中,命令设计模式不返回值。
我的实际问题是:
谢谢!
考虑这段代码(它在VisualStudio 2012上编译并运行)
#include "stdafx.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
int arr[100];
for (int i = 0; i < 100; ++i)
arr[i]=i;
int a = arr[10]; // 10
int a1 = arr[10,10]; // 10 <-
int a3 = arr[5,10,7]; // 7 <-
int a4 = arr[5,10,7,2]; // 2 <-
}
Run Code Online (Sandbox Code Playgroud)
我不明白标有< - 我期望编译错误的行的含义是什么.实际结果就像仅指定[]中的最后一个数字一样
那么,这意味着什么?到底有什么好处呢?