【发布时间】:2020-01-03 22:59:07
【问题描述】:
假设我有一个包含以下字段的简单表:
- ID:int、自增(身份)、主键
- 名称:varchar(50),唯一,具有唯一索引
- 标签:int
我从不使用 ID 字段进行查找,因为我的应用程序始终基于使用 Name 字段。
我需要不时更改标签值。我正在使用以下简单的 SQL 代码:
UPDATE Table SET Tag = XX WHERE Name = YY;
我想知道是否有人知道上述是否总是比:
DELETE FROM Table WHERE Name = YY;
INSERT INTO Table (Name, Tag) VALUES (YY, XX);
再一次 - 我知道在第二个示例中,ID 已更改,但这对我的应用程序无关紧要。
【问题讨论】:
-
作为一种习惯,我绝不建议更新主键列。
-
@KM:我同意,这是对我的真实表的简化,其中所有查找都是在一个不是主键的唯一字符串字段上完成的。我确实有一个完全不相关的主键 int 值,所以我从示例中删除了它(它是自动创建的,根本不参与查找)
-
@KM:我更新了示例以反映真实的表结构,以防万一它有所作为。
-
UDPATE 还具有不破坏表可能具有的任何外键关系的好处,只要被引用的键字段不改变。如果你 DELETE + INSERT,你的一些约束可能会被违反,因此 DELETE 可能会失败
标签: sql sql-insert sql-delete