【发布时间】:2016-01-18 05:15:19
【问题描述】:
我似乎遇到了一个奇怪的情况,其中有一个我无法使用的特定表名。让我解释一下。
CREATE TABLE IF NOT EXISTS hotstick_work_orders (
work_order_id BIGINT UNSIGNED NOT NULL,
step_id TINYINT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
FOREIGN KEY (work_order_id) REFERENCES work_orders (id) ON DELETE CASCADE ON UPDATE NO ACTION,
FOREIGN KEY (step_id) REFERENCES hotstick_steps (id) ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE NO ACTION ON UPDATE NO ACTION,
PRIMARY KEY (work_order_id, step_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这在我的本地 MySql 堆栈 (v5.6.17) 上运行良好,但是当我在 GoDaddy 上使用 PhpMyAdmin (v4.0.10.7, MySQL v5.5.42) 尝试它时给出错误代码 #1005。
好的,你说,这显然只是另一种 FK 定义不完全匹配的情况,或者可能是引用的表缺少列上的索引的情况。但是,我什至无法在没有 FK 的情况下创建表 - 以下同样失败:
CREATE TABLE IF NOT EXISTS hotstick_work_orders (
work_order_id BIGINT UNSIGNED NOT NULL,
step_id TINYINT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
PRIMARY KEY (work_order_id, step_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
更有趣的是,如果我运行原始的创建表查询但使用不同的名称,即使是 hotstick_work_order(没有最终的 s),它也可以正常工作。我可以将此表重命名为我想要的任何名称(包括更长的名称),hotstick_work_orders 除外。尝试给出错误 #1025,但仅限于该特定名称。
例如:
RENAME TABLE hotstick_work_order TO hotstick_work_orders;
Resulting Error: #1025 - Error on rename of './db/hotstick_work_order' to './db/hotstick_work_orders' (errno: -1)
# Whereas this works fine:
RENAME TABLE hotstick_work_order TO hotstick_work_orders_something;
我没有任何以前使用该名称的表,我也无法在 information_schema.table_constraints 表中找到任何现有约束。
当然我可以使用不同的表名来管理,没什么大不了的,但我很好奇 - 什么可能导致这种行为?
【问题讨论】:
-
您是否检查过该名称的数据库文件是否已经存在?也许你已经从其他一些失败的操作留下了剩菜,而 mysql 正确地拒绝重命名你当前的数据库文件,因为那会破坏那些其他文件。
-
这可能会解决您的问题:stackoverflow.com/questions/160233/….
-
我在哪里可以找到这些? information_schema 中的“文件”表为空。
-
@GordonLinoff 我已经看到了,不,它没有帮助。请仔细阅读我的问题。
-
你试过重启MySQL服务看看是否解决了吗?
标签: mysql