【问题标题】:Renamed MySQL table not renamed for INSERT queries?重命名的 MySQL 表没有为 INSERT 查询重命名?
【发布时间】:2011-05-30 12:28:44
【问题描述】:

将我的一个 MySQL 5.1 MyISAM 表从 test_tablename 重命名为 tablename 后,我发现如果我尝试执行 INSERT(或 REPLACE)查询,我会收到以下消息:

INSERT INTO tablename (...) VALUES (...)

1146: 表 'dbname.test_tablename' 不存在

我已经三次检查了我的数据库抽象代码,并通过直接在服务器上运行查询来验证这一点。

根据 MySQL 服务器,CREATE TABLE 语法是 tablename,正如预期的那样,当我运行 SHOW TABLES 时,它会按预期列出 tablename

发生这种情况有什么原因吗?

更重要的是,有没有比转储、删除、重新创建和重新加载表更简单的方法来解决这个问题?

【问题讨论】:

  • 昨天我的左臂被砍断了,今天我发现我左边的东西抓不住了。这是为什么呢?
  • 我假设您的意思是显式插入到表tablename,但错误消息仍然引用旧表名?
  • 是的,对不起。我已更新问题以澄清我正在执行的查询。
  • 您是否有可能在提到的表上有任何触发器?
  • @jweyrich:是的,就是这样。如果你这样回答,我会接受的。我不敢相信我错过了!

标签: mysql sql insert mysql-error-1146


【解决方案1】:

这很可能是由未相应更新的触发器引起的。

【讨论】:

    【解决方案2】:

    如果您将test_tablename 重命名为tablename,以下情况不应该是正确的吗?

    1146: Table 'dbname.test_tablename' doesn't exist
    

    请务必在查询中使用tablename,而不是test_tablename

    【讨论】:

    • 对不起,我忘了澄清:我的查询参考tablename,而不是test_tablename
    • 因为你的错误说 test_tablename 不存在,所以必须有一个视图/查询引用它。请仔细检查
    • 我没有使用视图,所以这不是问题,也不需要担心存储的查询。我已经直接在服务器上运行了查询,无需担心中间代码,但我仍然收到错误,并且仅适用于 INSERT/REPLACE。
    • 请发布您尝试运行的查询(show create table tablename 也很有用)。
    • 嗯,这个查询和我更新的问题一样(当然名字不一样,你可以在...中放任何你想要的东西,它仍然不起作用。),和你肯定不想看到整个 create table,因为有 100 个不相关的字段,但看起来像 CREATE TABLE tablename ( ... ) ENGINE=MyISAM DEFAULT CHARSET=latin1
    【解决方案3】:

    您确定您没有插入到仍然引用test_tablename 的视图中吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      相关资源
      最近更新 更多