【发布时间】:2019-03-23 05:59:38
【问题描述】:
我有一个包含几列的数据库表,其中一些列用于一起形成主键。现在模型发生了变化,引入了一个名为“id”的主键列。
当我更改表并添加列时,每行中都会使用默认值 0 或 NULL 填充该列,因此它不能用作新主键的候选者。为此,我必须在每一行中为“id”设置不同的(数字)值。我怎样才能做到这一点,最好尽可能通用(MySQL、Oracle、SQL Server)。
【问题讨论】:
-
将代理键列添加到表中的哲学可以跨平台转换,但要执行的代码将是相当特定于平台的.例如,Oracle 和 Microsoft 都有可用的
SEQUENCE对象和IDENTITY列,尽管语法不同。 MySQL 使用AUTO_INCREMENT而不是IDENTITY并且根本没有SEQUENCE对象。您是在寻找通用的理论答案,还是针对您所在平台的特定解决方案? -
我建议您使用比“id”更好的名称。当列根据它们所在的表更改名称时,这是我的一个小烦恼。如果你说一个 Claims 表,那么无论它在哪个表中,ClaimID 都是一个 ClaimID。但是手头的任务很复杂,因为你有处理所有关系值。这不是一项小任务。您必须以正确的顺序更新表并删除受影响表上的现有主键和外键。然后分配新的外键值。这并不像听起来那么容易。但并非不可能。
-
名称“id”实际上不是我在内部使用的名称。而且,是的,我正在寻找一个通用的理论答案。
-
除了我上面评论中的 2-3 句话之外,这对于通用答案来说太宽泛了。这将取决于本地方言(这意味着您正在使用的每个 DBMS 都会发生一些变化)并且在逻辑上具有挑战性以保持关系数据的相关性。
标签: mysql sql sql-server oracle