【问题标题】:MySQL Table LockMySQL 表锁
【发布时间】:2012-07-19 02:26:13
【问题描述】:

以下情况是否需要显式锁定mysql表:

mysql数据库用户名:db_user(而且只有一个)
Web 客户端会话:许多用户同时登录

由于 mysql 用户是单一的,但我与我的 Web 服务器有很多客户端会话。会发生什么(在一个表中插入记录,然后获取插入 ID 并将数据添加到另一个表):

  1. 许多网络会话都有单独的 db_user 副本。
  2. 为多个浏览器会话提供一个 db_user 副本。
  3. 任何其他。

请帮忙。

【问题讨论】:

  • 抱歉,我不明白你在问什么。如果您只是选择数据,那么不,您永远不需要锁定表。
  • 当使用第一个表中的最后一个插入 ID 插入并随后将数据添加到其他表时。
  • 锁表的目的是什么?你想只允许一个用户插入来获取主键吗?如果是这样,您可以使用 InnoDB 引擎和 last_insert_id() 函数。这个函数是一个基于会话的函数,所以总是会得到一个唯一的值(在不同的会话中)。 InnoDb 引擎将允许您使用行级锁定而不是表锁定,因此其他连接也将正常工作

标签: mysql locking


【解决方案1】:

哈米特,

简短的回答是否定的,你在做你描述的事情时不需要使用LOCK TABLES

只有当你想确保你是唯一一个写入表的时候,你才需要使用LOCK TABLES,例如,如果你想INSERT大量的记录,并且希望操作发生尽可能快。

您可以在mysqldump 命令创建的转储文件中看到这一点。以下是转储文件中的示例:

LOCK TABLES `tbl` WRITE;
/*!40000 ALTER TABLE `tbl` DISABLE KEYS */;
INSERT INTO `tbl` VALUES ...
/*!40000 ALTER TABLE `tbl` ENABLE KEYS */;
UNLOCK TABLES;

【讨论】:

  • 锁定对单个(但很大)REPLACE 语句有益吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多