我构建了一个查询,我想知道它是否适用于MySQL以外的任何数据库.我从来没有真正使用过其他数据库,所以我对这些差异并不满意.
以下是我所依赖的具体功能(我可以想到它们): >更新查询. 我相信人们会好奇这是做什么的,这也可能包括可能无处不在的数据库功能.这是使用数据库进行互斥的实现,用于Web应用程序.在我的情况下,我需要它,因为某些用户操作导致表被删除并使用不同的列重新创建,我想避免错误,如果应用程序的其他部分尝试插入数据.因此,该实施专门用于解决the readers-writers problem. 此查询假定存在具有两个字段的表锁:key(varchar)和value(int).它进一步假设该表包含一行,使得key =“key1”.然后它尝试增加“key1”的值.只有当列表中的每个键(“key2”,“key3”)时,它才会这样做,相关的值为0(l2的WHERE条件是假设值永远不为负的近似值).因此,如果满足某些条件,则该查询仅“获得锁定”,可能是以原子方式.然后,应用程序检查它是否通过查询的返回值收到锁定,该返回值可能表示受影响的行数.当且仅当没有行受影响时,应用程序才会收到锁定. 因此,以下是查询本身无法识别的附加条件: >假设在多线程环境中,此查询的副本永远不会与另一个副本交错. 作为辅助请求,我将非常感谢“标准SQL”上的任何资源.我听说过它,但从来没有找到任何类型的定义,当MySQL文档说“这个功能是标准SQL的扩展”时,我觉得我错过了很多东西. 根据响应,此查询应在所有系统中更好地工作:
由于好的答案,为每个人提供支持.标记的答案旨在直接回答我的问题,即使只针对另一个DBMS,即使可能有更好的解决方案来处理我的特定问题(甚至一般的跨平台SQL问题). 解决方法: 对于PostgreSQL
无法想象没有UPDATE的RDBMS. (?)
在PostgreSQL中,您将包含
在PostgreSQL中不可能.使用子查询,CTE或Window函数.
适用于我所知道的任何RDBMS.
PostgreSQL的multiversion model MVCC(多版本并发控制)在处理并发性方面优于MySQL.然而,在这方面,大多数RDBMS都优于MySQL.
Postgres就是这样做的,大多数RDBMS都这样做. 此外,此查询不会在PostgreSQL中运行,因为: >没有反叛的identifiers(这是MySQL俚语). 见list of reserved words in Postgres and SQL standards. |
|