看了下并发处理的讨论,看到了以下内容
第一条数据库级别的并发
在数据库里写事务比如
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
begin tran
update table1 set A='aa' where B='b2'
waitfor delay '00:00:05' --等待5秒
commit tran
如果在程序里写
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted,"SampleTransaction");
command.Connection = connection;
command.Transaction = transaction;
try
{
command.CommandText ="update table1 set A='aa' where B='b2'";
command.ExecuteNonQuery();
Thread.Sleep(5000);
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
}
}
第一个问题,求问大牛们数据库写事务好还是程序里写事务好?
第二条代码级别的并发
可以在程序加锁用ReaderWriterLockSlim类做到的样子或者用Application.Lock();Application.UnLock();或者直接Lock(this.xx)
第二个问题,求问大牛们你们是用什么锁定的?
第三条应用程序级别的并发
乐观锁可以用时间戳或者设置个版本号,更新的时候比对一下一开始获取时候的值,如果一样的话就更新,否则就提示别人“已经修改过,更新失败”
悲观锁的话也是指事务隔离级别或数据库锁吧。
事务隔离级别
SET TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED
| READ COMMITTED
| REPEATABLE READ
| SNAPSHOT
| SERIALIZABLE
}
[ ; ]
数据库锁例如SELECT * FROM table WITH (HOLDLOCK) --其他事务只能读取表,但不能更新删除
第三个问题,不知道我理解的悲观锁和乐观锁对不对?
最后个问题大牛们是如何进行并发处理的?
分数不多,全部家当了,求大牛们赐教!