65.9K
CodeProject 正在变化。 阅读更多。
Home

MySQL 表管理器

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2008年5月4日

CPOL

2分钟阅读

viewsIcon

25063

downloadIcon

440

MySQL 引擎允许用户级别的锁。本文解释了如何操作这些锁类型。

引言

MySQL 引擎允许用户级别的锁:GET_LOCK()RELEASE_LOCK() 函数。IS_FREE_LOCK() 用于检查锁。LockTable 是从用户角度处理锁的函数;它将持续循环,直到获得锁。ReleaseTable 函数将处理数据库用户级别锁的释放。带有 try / catch 块的 LockTableReleaseTable 函数可用于安全地处理数据库异常。函数如果一切顺利将返回 true,如果发生异常则返回 false。

背景

程序使用 ODBC 连接字符串连接到测试 MySQL 数据库。程序从用户那里获取事务(查询、插入、更新),并将它们放入数组中。在输入每个事务后,用户按下“添加事务”按钮。在输入所有事务后,用户按下“运行”按钮。

程序基于其他事务的锁进行工作,通过程序中的两个按钮进行模拟。这两个按钮是处理其他事务,用于锁定表,以及结束其他事务,用于解锁表。程序在处理事务之前测试独占锁。

如果表被锁定,则通过调用 SELECT IS_FREE_LOCK('TPS') 来释放表。如果表当前被锁定,我们将使用 Thread.Sleep(x); 在一段时间后重试。如果表未被锁定,我们将执行锁定查询 SELECT GET_LOCK('TPS',x) 来锁定表。这里,x 是超时时间。

SELECT RELEASE_LOCK('TPS') 查询用于释放锁。

ExecuteQueries 是执行所有处理的主要函数。它调用 LockTable 函数以在用户级别锁定表。它初始化一个 Transaction 对象,将查询放置在数据库中,提交或回滚事务,调用 ReleaseTable 函数,并返回执行操作的结果。

使用代码

下载代码并在 MySQL 测试数据库中创建一个名为 TPS 的表,其模式如下(CourseProfessorScheduleStudents)。所有字段都是字符 (Text);Students 字段是一个 number)。

运行附带的程序,并按照以下示例输入数据

--Example query
select * from tps where course ='transactions';
 
--Example insert
insert into tps values('TestCourse', 'Dr. MAJO', 'MWF', 25);
 
--Example update
update tps set course='TestCourse' where professor='Dr. MAJO';
 
--Example delete
delete from tps where course='test';

在输入 SQL 语句后,按下添加事务,然后按下处理另一个事务。现在按下运行。由于表被另一个事务独占锁定,程序将不会运行 SQL 语句。按下结束其他事务,现在您的 SQL 语句将运行。

© . All rights reserved.