在MySQL中创建表失败,错误2103,错误1146和错误1051

时间:2015-08-24 08:58:05

标签: mysql

我有一个非常奇怪的Mysql行为。

我尝试创建一个简单的新表:

CREATE TABLE IF NOT EXISTS `voucherCampaignProduct` (
 `id` int(12) NOT NULL AUTO_INCREMENT,
 `voucherCampaignId` int(12) NOT NULL,
 `productId` int(10) NOT NULL,
 `shopId` int(10) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`voucherCampaignId`) REFERENCES voucherCampaign(id),
FOREIGN KEY (`productId`) REFERENCES product(id),
INDEX (`shopId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

当我运行此而不是创建表格时,我收到了:Error Code: 2013. Lost connection to MySQL server during query

如果我再次运行相同的查询,我会收到:Error Code: 1146. Table 'schemaName.voucherCampaignProduct' doesn't exist - >为什么我在表创建时收到此错误?!

如果我放弃表格,我会收到错误Error Code: 1051. Unknown table 'voucherCampaignProduct'。但是在我运行之后,而不是错误1146我再次收到了2013年的错误......

现在最奇怪的部分:没有productId外键的表的创建工作完美。即使我使用普通索引也可以。

有人可以告诉我为什么会有这种奇怪的行为吗?

2 个答案:

答案 0 :(得分:1)

我不能说你的问题与我解释的相同,但根据错误代码,它可以是 -

你第一次得到:错误代码:2013:与会话超时有关:

在您的查询浏览器中,DBMS连接读取超时选项设置得非常低,并且由于某些问题,表创建语句也需要一些时间,因此您可以在浏览器中增加此错误。

此时表已创建,但由于某些原因被破坏。原因可能是由于区分大小写,因为如果在配置文件中没有设置为1,则mysql lower_case_table_names中有一个选项,那么产品和产品将是2个表但是在设置它之后1将是同一个表。所以有些专栏最有可能。 Productid违反了这种类型的任何mysql规则。

第二次得到:错误代码:1146:表不存在。

此时由于表格中断,您收到此错误。

第三次得到:错误代码:1051:在删除期间存在表格。

这是由于桌子在那里,但是因为它被破坏了,在这个位置你不能再创建具有相同名称的桌子并且不能放弃它。

但是现在你可以访问表了,看来你已经重新启动了你的mysql服务,或者你的破坏表已经被修复了。

答案 1 :(得分:0)

所以我发现了错误。我创建了没有产品索引的表,然后尝试添加它。

然后我收到了错误: Error code: 1005. Can't create the table 'schema.name'.#sql-24b8_25 (errorno: 150)

经过一些谷歌搜索后,似乎我对子键和父键的定义不一样。那么parentID也必须是UNSIGNED ......它没有问题。