1

我有这个随机内容的随机表。

编号 | 姓名| 任务
1 | 啊啊啊 基特
2 | bbbb | 等
3 | cccc| qwqw
4 | dddd | qwert
5 | eeee | 潜力
6 | 呸呸呸| 多多


我想要的是在上表中添加一个 id=3 的列,具有不同的名称和不同的任务,但旧的 id =3 我想要一个 id = 4 的名称和它之前的任务,当它是 id =3,OLD id =4 变成 id=5,名字和任务为 id 5,以此类推。
就像我想在列中输入一列,而在下面的列中我想增加 id +1 但列保持不变。下面的例子:


编号 | 姓名| 任务
1 | 啊啊啊 基特
2 | bbbb | 等
3 | zzzzzz| zzzz
4 | cccc| qwqw
5 | dddd | qwert
6 | eeee | 潜力
7 | 呸呸呸| 多多

为什么我要这样做?我有一个有 2 个 CLOB 的表。在这些 CLOBS 内部有不同的查询,例如: id =1 具有创建表的 clob id=2 为列插入 id=3 具有创建另一个表 id=4 具有
如果您在一个文本中添加所有这些 id 的功能(或 clob)他们必须先创建然后插入然后再创建函数。那张桌子就像一个巨大的脚本。
我为什么要这样做?开发人员正在构建他们的应用程序,他们希望 sql 以特定顺序工作,我有 6 个开发人员,正在组织数据建模和性能以及脚本的运行方式。所以上表是组织脚本的调用他们衰弱

4

2 回答 2

7

简单地说,不要这样做。

这个案例强调了为什么你永远不应该使用任何商业价值,即主键的任何“现实世界价值”。

在您的情况下,我建议不要将主键用于任何其他目的。我建议您添加一个额外的列“order”,然后更改该列以重新排序行。这样您的主键和所有其他记录就不需要被触及。

这避免了您的方法需要更改当前记录下方的所有数据库记录的问题,这似乎是一种非常糟糕的方法。想象一下尝试撤消该更新;)

这里有更多信息:https ://stackoverflow.com/a/8777574/631619

于 2013-05-24T19:29:24.153 回答
1
UPDATE random_table r1
SET id =
  (SELECT CASE WHEN id > 2 THEN id+1 ELSE id END id FROM random_table r2
  WHERE r1.mission=r2.mission
  )

然后插入新值。

于 2013-05-25T07:30:01.760 回答