我想知道有没有办法在没有隐式提交事务的情况下锁定MySQL表。
假设我有两个表(table_1,table_2),并且我会在事务的同时将数据插入到这些表中。我需要锁定'table_2',以便其他用户在事务完成之前无法编写/修改'table_2'。我的问题是当我锁定table_2时,事务是隐式提交的。是的我知道它在MySQL文档中有解释
LOCK TABLES不是事务安全的,并且隐式提交任何活动的 尝试锁定表之前的事务
我想知道是否还有其他事务安全方法来执行表锁定。
这是我的C#代码段
MySQLTransaction trans = conn.BeginTransaction();
command.Transaction = trans;
command.CommandText = "INSERT INTO table_1 VALUES ('val1', 'val2')";
command.ExecuteNonQuery();
command.CommandText = "LOCK TABLES table_2 WRITE";
command.ExecuteNonQuery();
command.CommandText = "INSERT INTO table_2 VALUES ('val1', 'val2')";
command.ExecuteNonQuery();
command.CommandText = "RELEASE TABLES";
command.ExecuteNonQuery();
trans.Commit();
是否有想法在没有提交事务的情况下锁定和插入数据到'table_2'?
提前致谢
答案 0 :(得分:0)
如果您打算按照正确的意图锁定正确的方法,请事先锁定两个表:
LOCK TABLES table_1 WRITE, table_2 WRITE
INSERT INTO table_1 VALUES ('val1', 'val2')
INSERT INTO table_2 VALUES ('val1', 'val2')
UNLOCK TABLES
Native MySQL提供了这个(虽然我从未测试它是否可以通过连接器工作 - 但不知道为什么不这样做。)
一旦你有了锁,没有人可以进入。
答案 1 :(得分:0)
试试这个,用C#编写
>>> shuffle_by_two("hello world")
'hello wolrd'
>>> shuffle_by_two("hello world")
'hello wolrd'
>>> shuffle_by_two("hello world")
'ehllo owrld'
>>> shuffle_by_two("hello world")
'ehllo world'
>>> shuffle_by_two("hello world")
'hello owlrd'
>>> shuffle_by_two("hello world")
'ehll oowrld'
>>>