我有一个非常奇怪的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外键的表的创建工作完美。即使我使用普通索引也可以。
有人可以告诉我为什么会有这种奇怪的行为吗?
答案 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 ......它没有问题。