在开发项目时,遇到一个问题,就是要随机读取一张表的部分记录,并update设置为不可在读,这里就有一个问题,可能多个人同时随机到相同的记录,并重复做update操作,引起数据脏读和重复操作,
因此考虑给表加锁。但是采用了MyISAM,不支持事务,只能加表级锁,而且别人连读的权限都没有。下面是2个测试文件,在firefox运行test.php,在ie里运行test1.php,会发现,火狐运行后10秒内,ie里处于等待状态,其实就是test.php里给表加了锁,网页没运行结束,锁未被释放,当10秒过后,锁自动被释放,ie里马上出现内容了,这样做实现了随机读取表的记录并修改,但是带来的缺憾是锁表期间,其他进程对该表的读的权限也没有,也就是用户在操作表记录时,管理员都没有读的权限,还是得修改表引擎,换成innodb,用事务来解决。
test1.php
$db=new db();
$db->locktable("LOCK TABLES sbs_temp WRITE");
$sql="select * from sbs_temp limit 5";
$rs=$db->getRs($sql);
foreach($rs as $row) {
echo $row['query']."<br>";
}
test.php
$db=new db();
$db->locktable("LOCK TABLES sbs_temp WRITE");
$sql="select * from sbs_temp limit 5";
$rs=$db->getRs($sql);
foreach($rs as $row) {
echo $row['query']."<br>";
}
sleep(10);
分享到:
相关推荐
值得学习的MySQL行级锁、表级锁、页级锁详细介绍
MySQL数据库管理系统提供了多种锁机制,包括行级锁、表级锁和页级锁,这些锁的使用和理解对于优化并发性能和避免死锁至关重要。 1. 行级锁(Row-Level Locking) 行级锁是MySQL中最细粒度的锁,它只锁定操作的特定...
MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。 - **表共享读锁**:允许其他用户读取同一表的数据,但不允许写入。 - **表独占写锁**:阻止任何用户对同一表进行读写...
MySQL的锁分为表级锁、页级锁与行级锁。表级锁是MySQL中粒度大的一种锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。常使用的MYISAM与INNODB都支持表级锁定。 表级锁定分为两类,读锁与写锁。读锁是预期...
比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但...
在MySQL中,主要存在两种类型的锁:行级锁(Row-Level Locks)和表级锁(Table-Level Locks)。InnoDB存储引擎默认支持行级锁,而MyISAM只支持表级锁。 行级锁能提供更高的并发性能,因为它只锁定操作影响的具体行...
其中,行级锁、表级锁和页级锁是MySQL中最为常见的锁类型。本文将详细解析这三种锁机制的特点、应用场景以及优化策略,旨在帮助数据库管理员和开发人员更好地理解MySQL的锁机制,并在实际工作中做出更合理的锁策略...
在多用户环境中,为了保证数据的一致性和完整性,MySQL 提供了多种锁定机制,包括全局锁、表级锁和行级锁。这些锁机制是数据库事务处理中的核心组成部分,下面我们将详细探讨这些锁的特性和应用场景。 1. **全局锁...
locks%'`,我们可以获取关于表级锁定的统计信息,如`table_locks_immediate`表示立即获得表锁的次数,`table_locks_waited`则显示因锁定争用而发生的等待次数,这些指标有助于分析和优化锁的使用。 接着,我们转向...
17.MySQL高级锁MyISAM表锁查看锁争用情况.avi 18.MySQL高级锁InnoDB行锁介绍及背景知识.avi 18.MySQL高级锁InnoDB行锁类型.avi 19.MySQL高级锁InnoDB行锁基本演示.avi 20.MySQL高级锁InnoDB行锁行锁升级为表锁.avi ...
事务的四大隔离级别、数据库中的共享锁与排他锁、MySQL 的行级锁与表级锁 事务的隔离级别是指在数据库管理系统中,为了维护事务的隔离性,防止脏读、不可重复读和幻读等问题,而对事务并发执行时的隔离程度进行的...
在MySQL中,有三种主要的锁定级别:行级锁、表级锁和页级锁。 1. **行级锁**:行级锁(Row-Level Locking)是最细粒度的锁,只锁定单个数据行。这使得其他事务可以同时对表中的其他行进行读写操作,从而提高了并发...
46.MySQL高级_小表驱动大表.avi 45.MySQL高级_索引优化答疑补充和总结口诀.avi 44.MySQL高级_索引面试题分析.avi 43.MySQL高级_索引优化10.avi 42.MySQL高级_索引优化9.avi 41.MySQL高级_索引优化8.avi ...
MySQL的表级锁分为表共享读锁(TableReadLock)和表独占写锁(TableWriteLock)。其中表共享读锁允许多个用户同时读,但不允许写;表独占写锁则完全阻止其他读写操作。一旦有线程获得写锁,只有该线程可以进行写操作...
MyISAM是MySQL早期常用的存储引擎之一,它仅支持表级锁。这意味着,在对一个表进行操作时,整个表都会被锁定,从而影响其他用户的并发操作。 **注意事项**: - 使用`LOCK TABLES`命令可以显式地为表添加表级锁。 - ...
首先,MySQL的锁机制主要有表级锁、行级锁以及页面锁三种。不同的存储引擎对锁的支持也不同。MyISAM和MEMORY存储引擎使用表级锁,BDB存储引擎支持页面锁,同时也可以使用表级锁,而InnoDB存储引擎则同时支持行级锁和...
MySQL数据库在处理并发事务时,可能会出现锁表的问题,这通常发生在多个事务同时访问和修改同一数据时。当一个事务尚未完成,其他事务无法进行相关操作,就会导致锁表现象,影响数据库性能和应用的正常运行。本文将...
此外,InnoDB 存储引擎还支持意图锁,意图锁是表级锁,表明事务在后期会对该表的行施加共享锁或者排他锁。意图锁分为共享意图锁(IS)和排他意图锁(IX)。 锁之间的相互关系: 锁之间的相互关系是非常复杂的。例如...
MySQL用户级锁操作函数涉及的主要是针对数据库操作中对于共享资源的并发控制问题。用户级锁通常用于控制多个会话对某些资源访问的一致性和排他性。在MySQL中,可以利用内置函数如GET_LOCK、RELEASE_LOCK、IS_FREE_...