一尘不染

SQL命名法:INSERT / UPDATE / DELETE是``纯粹的''还是``指令性的''?

sql

调用INSERT/UPDATE/DELETE语句哪个更合适?命令还是查询?我会认为是“命令”,因为“查询”表示您正在询问一个问题并希望得到您的问题的答案(以及不仅仅是“是的,此操作已成功执行,并且,可选地,这是您的插入ID”的更多信息)

只是来自中级Web应用程序开发人员的一个问题,他还是一名通信专业的人,并且是一个具有特殊性的人。


阅读 111

收藏
2021-05-16

共1个答案

一尘不染

一个通称INSERTUPDATEDELETE并且MERGE是一个“更新”(即使它可能造成混乱-
而不是理想的-这UPDATE仅仅是“更新”的一个子集)。替代术语是“关系分配”。

该通称SELECTINSERTUPDATEDELETEMERGE(和任何用分号其他终止)被称为“声明”。

严格来说,“查询”是SELECT返回结果集的语句(例如,将排除SELECT..INTO..FROM语句)。但是,不幸的是,使用术语“查询”来指代更新是非正式的,但这是非常普遍的。例如,尽管“更新查询”是一个矛盾词,但是当我使用该确切术语(site:stackoverflow.com "update query")在Google上对该网站进行Google搜索时,我得到了17,300次点击!


更新(双关语:)

@David Marx:我不同意您的说法,将INSERT / DELETE /
MERGE称为“更新”是适当的。那将非常令人困惑。只有UPDATE是更新。

我在最初的回答中同意,这种情况可能令人困惑。我们很幸运能够使用Stackoverflow格式化答案和注释,以便UPDATE区分关键字和逻辑更新。以大写形式编写关键字(完全标准SQL-92要求:)也有帮助。

但是,通过阅读一般的数据库和计算机科学文献,我可以告诉您“更新”确实是正确的统称。我在下面为此提供了一个引文:

Hugh Darwen撰写的“关系数据库理论概论”(2010年)(免费提供pdf下载-Google):

预期在关系数据库管理系统的不同的更新运营商通常被称为INSERTDELETE并且UPDATE,那些是在教程d(也在SQL)[第28页]中使用的名称

令人遗憾的是,关键字UPDATE已被广泛接受为只是一个用于更新数据库的特定运算符的名称。请不要射击信使![p.168]

尽管[关系]分配在理论上足以进行更新,但是使用速记表达目标relvar的当前值和新值之间的差异通常更为方便。有时…这种区别只是在现有集合中添加一个或多个元组;有时,它只是对某些现有元组的某些属性值的更改;有时只是删除一些现有的元组。对于这三个特殊情况下速记已经被称为INSERTUPDATEDELETE分别自远古以来-
换句话说,即使是关系数据库出现之前,虽然这当然来临之前更新的目标是文件,而不是relvars或SQL桌子[p.165]

2021-05-16