0

假设我在 mySQL 中有一个表业务。

每个“企业”中的 ID 是标题和位置的函数。它使编程变得更加容易。

我也经常合并 2 个相同的业务,等等。

说有一天公司的名称改变了,我想改变ID。我很少做的手术。

许多其他表格都指向该业务。

所以我该怎么做?

我是否应该创建新 ID,然后将指向原始业务的所有关系更改为新 ID?

是否有一个 mysql 命令可以更快地执行此操作?

任何示例 vb.net 代码?

4

1 回答 1

1

根据每个表使用的数据库引擎及其设计,如果您在表上配置了外键和约束,您可能无需执行任何操作。

首先要做的是检查链接表的结构。为此,请show create table xyz在 MySQL 会话中运行并检查:

  1. 如果正在使用 InnoDB 引擎
  2. 表上存在外键和约束

(外键仅在使用 InnoDB 引擎时才有实际用途。您可以在其他引擎中请求它们,但它们不会做任何事情。)

如果你幸运地使用了 InnoDB 引擎并且有适当的约束,那么你正在寻找类似的东西:

CONTRAINT `FK_businessID` FOREIGN KEY(`businessID`) REFERENCES `Business` (`ID`) 
    ON DELETE CASCADE ON UPDATE CASCADE

在表定义中。如果您确实看到这样的内容,您应该能够安全地更改业务表中的 ID,并且所有其他链接表都应该效仿。

如果您没有外键但正在使用 InnoDB 引擎,请在单个事务中更改所有表中的信息,这样,如果出现任何问题,请执行您无法控制的更改(连接丢失、查询错误等)可以回滚。

最后,如果你没有使用 InnoDB 引擎,祝你好运。您将不得不冒着“即时”更改记录的风险。您的主要选择(按个人喜好排列)是:

  1. 计算出新密钥并在表上使用多个更新,并希望它们都能正常工作并且不会影响当前使用数据的任何人
  2. 使用新 ID 创建一条新记录,将初始记录中的所有信息复制到新记录中,然后在链接表上使用多个更新,然后删除原始记录,同时希望它一切正常并且不会影响当前使用数据的任何人
  3. 使用新 ID 创建一条新记录,复制链接表中的所有记录,检查它然后删除初始记录
  4. 使用魔法

显然,通过以上所有方法,在下定决心之前,请进行大量(我说的是大量)测试和备份。并且在使用数据库的客户数量最少的时候进行;换句话说,一夜之间。

于 2012-05-23T10:42:42.500 回答