You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL执行脚本报错[1100]:表'afiliados'未通过LOCK TABLES锁定

解决MySQL错误1100:Table 'afiliados' was not locked with LOCK TABLES

问题根源

你遇到的问题出在脚本的执行上下文:这段代码是更大脚本的一部分,当前会话可能已经存在未释放的表锁定。MySQL的LOCK TABLES是会话级别的——一旦执行LOCK TABLES锁定了某些表,当前会话只能访问这些被锁定的表;后续创建新表后,新表不会自动加入锁定列表,哪怕你后续写了LOCK TABLES afiliados WRITE,如果之前的锁定未正确处理,依然会触发错误。

另外,你的表采用InnoDB引擎,LOCK TABLES、ALTER TABLE DISABLE/ENABLE KEYS这些语句是为MyISAM设计的,InnoDB会自动处理索引维护,这些语句对它来说完全没必要。


解决方案

方案1:移除不必要的锁表语句(推荐)

直接删除所有和锁表、禁用/启用索引相关的代码,简化后的脚本如下:

DROP TABLE IF EXISTS `afiliados`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `afiliados` (
  `value1` varchar(13) NOT NULL,
  `value2` varchar(30) NOT NULL,
  `value3` int(11) NOT NULL,
  `value4` varchar(50) NOT NULL,
  `value5` varchar(50) NOT NULL,
  `value6` varchar(100) NOT NULL,
  `value7` varchar(25) NOT NULL,
  PRIMARY KEY (`value1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

-- 直接插入数据,无需锁表
INSERT INTO `afiliados` VALUES ...

InnoDB的事务和行锁机制会自动保证数据一致性,完全不需要手动锁表。

方案2:清理会话残留锁定(若必须保留锁表逻辑)

如果你的更大脚本确实需要锁表,在执行这段创建表的代码前,先释放所有现有锁定:

-- 先清除会话中所有未释放的锁定
UNLOCK TABLES;

DROP TABLE IF EXISTS `afiliados`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `afiliados` (
  `value1` varchar(13) NOT NULL,
  `value2` varchar(30) NOT NULL,
  `value3` int(11) NOT NULL,
  `value4` varchar(50) NOT NULL,
  `value5` varchar(50) NOT NULL,
  `value6` varchar(100) NOT NULL,
  `value7` varchar(25) NOT NULL,
  PRIMARY KEY (`value1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

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

方案3:批量锁定所有需要操作的表(若更大脚本涉及多表操作)

如果更大的脚本需要同时锁定其他表和afiliados,必须在同一条LOCK TABLES语句中列出所有表,不能分开执行:

-- 同时锁定所有需要操作的表,比如other_table和afiliados
LOCK TABLES `other_table` WRITE, `afiliados` WRITE;

-- 执行创建表、插入数据等操作
DROP TABLE IF EXISTS `afiliados`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `afiliados` (
  `value1` varchar(13) NOT NULL,
  `value2` varchar(30) NOT NULL,
  `value3` int(11) NOT NULL,
  `value4` varchar(50) NOT NULL,
  `value5` varchar(50) NOT NULL,
  `value6` varchar(100) NOT NULL,
  `value7` varchar(25) NOT NULL,
  PRIMARY KEY (`value1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

/*!40000 ALTER TABLE `afiliados` DISABLE KEYS */;
INSERT INTO `afiliados` VALUES ...
/*!40000 ALTER TABLE `afiliados` ENABLE KEYS */;

UNLOCK TABLES;

内容的提问来源于stack exchange,提问作者Pablo Benavides Canales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:53:12