您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

一个通称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]

SQLServer 2022/1/1 18:52:38 有292人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶