Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
MySQL,重命名数据库中所有表的所有列_Mysql_Sql_Innodb - Fatal编程技术网

MySQL,重命名数据库中所有表的所有列

MySQL,重命名数据库中所有表的所有列,mysql,sql,innodb,Mysql,Sql,Innodb,我在一个数据库中有大约500多个表,需要重命名所有表的所有列。 数据库引擎是InnoDB。 目前,我正在为每个表执行一个 ALTER TABLE RENAME db.table CHANGE oldID newID INT, CHANGE oldDESC newDESC VARCHAR(50); 这在某些表中是失败的(errno:150),因为它们具有引用其他表的外键约束 有没有更聪明的方法来做到这一点并避免这些可怕的错误?您可以尝试在执行更新时禁用外键检查,然后再次启用它们 编辑:也许你能帮

我在一个数据库中有大约500多个表,需要重命名所有表的所有列。 数据库引擎是InnoDB。 目前,我正在为每个表执行一个

ALTER TABLE RENAME db.table CHANGE oldID newID INT, CHANGE oldDESC newDESC VARCHAR(50);
这在某些表中是失败的(errno:150),因为它们具有引用其他表的外键约束


有没有更聪明的方法来做到这一点并避免这些可怕的错误?

您可以尝试在执行更新时禁用外键检查,然后再次启用它们

编辑:也许你能帮上忙


您可以在执行更新时尝试禁用外键检查,然后再次启用它们

编辑:也许你能帮上忙


确保你真的禁用了它们。但是,如果mysql因为任何原因不允许您这样做,我想您可以尝试删除它们,然后将它们放回原处。这更难。我不知道如何备份外键以恢复它们,但我想一定有解决方案。我如何知道我是否真的禁用了外键。我尝试重新定位设置的外键检查=0;就在我的重命名过程之前,但即使这样也失败了。我不知道你的设置。尝试一个简单的测试,如您的示例中所示。禁用检查,然后运行sql来更改表。最好在phpmyadmin或mysql控制台中执行此操作,这样可以避免任何依赖关系。另外,不要忘记,在备份/恢复数据库时,mysql将包括在导入数据之前禁用外键检查,并在最后进行设置。它是有效的。或者它应该会起作用。如果不是这样,您的安装可能会有问题:sOk!MyISAM是否比InnoDB更严格,请看,我正在开发一个测试框架,因此我可以在这里做一些不寻常的事情来让数据库正常工作。是否可以将所有表转换为MyISAM,然后进行重命名。那会更简单吗?确保你真的禁用了它们。但是,如果mysql因为任何原因不允许您这样做,我想您可以尝试删除它们,然后将它们放回原处。这更难。我不知道如何备份外键以恢复它们,但我想一定有解决方案。我如何知道我是否真的禁用了外键。我尝试重新定位设置的外键检查=0;就在我的重命名过程之前,但即使这样也失败了。我不知道你的设置。尝试一个简单的测试,如您的示例中所示。禁用检查,然后运行sql来更改表。最好在phpmyadmin或mysql控制台中执行此操作,这样可以避免任何依赖关系。另外,不要忘记,在备份/恢复数据库时,mysql将包括在导入数据之前禁用外键检查,并在最后进行设置。它是有效的。或者它应该会起作用。如果不是这样,您的安装可能会有问题:sOk!MyISAM是否比InnoDB更严格,请看,我正在开发一个测试框架,因此我可以在这里做一些不寻常的事情来让数据库正常工作。是否可以将所有表转换为MyISAM,然后进行重命名。那会更简单吗?
START TRANSACTION;  
SET foreign_key_checks = 0; -- off

.. do stuff here    

SET foreign_key_chekcs = 1; -- on.
COMMIT;