Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C MySqlCommand多点外键问题_C#_Mysql_Foreign Keys - Fatal编程技术网

C# C MySqlCommand多点外键问题

C# C MySqlCommand多点外键问题,c#,mysql,foreign-keys,C#,Mysql,Foreign Keys,我希望有人能帮我解决这个问题 我有一个小应用程序来“修补”我们的数据库,因为我们需要增强功能并修复bug。它读入修补程序,这些修补程序只是带有SQL语句的文件,并执行一些内部管理,查询数据库并应用尚未应用的修补程序。不管怎样,这是我们的解决方案,好的还是坏的,而且效果非常好。。。直到现在 我发现有必要删除许多表上现有的外键约束,并用on DELETE CASCADE子句代替它们当前的on DELETE约束。其思想是删除这些其他表引用的表上的PK将导致清理所有其他表 基本上,修补程序文件包含以下内

我希望有人能帮我解决这个问题

我有一个小应用程序来“修补”我们的数据库,因为我们需要增强功能并修复bug。它读入修补程序,这些修补程序只是带有SQL语句的文件,并执行一些内部管理,查询数据库并应用尚未应用的修补程序。不管怎样,这是我们的解决方案,好的还是坏的,而且效果非常好。。。直到现在

我发现有必要删除许多表上现有的外键约束,并用on DELETE CASCADE子句代替它们当前的on DELETE约束。其思想是删除这些其他表引用的表上的PK将导致清理所有其他表

基本上,修补程序文件包含以下内容:

ALTER TABLE `mydb`.`table2` DROP FOREIGN KEY `fk_table2_id`;
ALTER TABLE `mydb`.`table3` DROP FOREIGN KEY `fk_table3_id`;
ALTER TABLE `mydb`.`table4` DROP FOREIGN KEY `fk_table4_id`;
以及相关的

ALTER TABLE `mydb`.`table2` ADD CONSTRAINT `fk_table2_id` FOREIGN KEY `fk_table_id` (`fk_the_id`) REFERENCES `mydb` (`id`)
ON DELETE CASCADE
ON UPDATE RESTRICT;

etc...
在C端,当我传递这个字符串时,补丁文件中的SQL语句如下所示:

MySqlCommand myCommand = new MySqlCommand(thePatch);
myCommand.Connection = connection;
myCommand.ExecuteNonQuery();
我收到以下错误消息:

将“.\mydb\table2”重命名为“.\mydbsql2-6a8-3f”时出错错误号:152

只有当我在字符串中有两个外键行时才会得到这个

我已经确定放置行上列出的键是键,而不是列名,其他的一切至少在我看来都是正常的

我在一个MySqlCommand中包含了多个SQL语句,没有任何问题,所以我有点沮丧

我可以从命令行获取相同的文件并通过管道将其传输到mysql.exe,它工作正常,因此在处理语句的方式上似乎有所不同

有人对此有什么想法吗

谢谢,
Matt

我不知道完整答案,但这可能有助于更深入地解决问题。更改表时,MySQL使用以下步骤:

使用新规范创建表newTableName 将*从oldTableName选择到newTableName 将oldTableName重命名为某个intermediateTableName 将newTableName重命名为OldTableName 删除中间表名 您提到的错误看起来可能未通过此处的步骤3。您可以检查文件权限。除此之外,我将听从那些对MySQL内部结构有更深入了解的人