gpt4 book ai didi

mysql - 类似 SERIAL 的 INT 列

转载 作者:搜寻专家 更新时间:2023-10-30 22:04:32 24 4
gpt4 key购买 nike

我有一个应用程序,根据添加或更新的交易类型,票号可能会增加也可能不会增加。我不能对票号使用 SERIAL 数据类型,因为无论交易类型如何,它都会递增,因此我将票号定义为 INT。因此,在多用户环境中,如果用户 A 正在添加或更新交易,而用户 B 也在做同样的事情,我会测试 tran 类型,如果需要下一个票号,那么

LET ticket = (SELECT MAX(ticket) [WITH ADDLOCK or UPDLOCK?] FROM transactions) + 1

然而,这必须恰好在行被提交时完成,否则麻烦就会开始。您能想出一种更好的方法来使用:Informix、Oracle、MySQL、SQL-Server、4Js/Genero 或其他 RDBMS 吗?这是决定我将在何种 RDBMS 中重写我的应用程序的一个主要因素。

最佳答案

使用 Informix DBMS,SERIAL 列在插入后不会改变;实际上,您根本无法更新 SERIAL 值。您可以插入一个值为 0 的新值(在这种情况下会生成一个新值),或者您可以插入其他值。如果另一个值已经存在并且存在唯一约束,那将失败;如果不存在,或者 serial 列上没有唯一约束,那么它将成功。如果插入的值大于先前插入的最大值,则下一个要插入的数字将再大一个。如果插入的数字较小或为负数,则对下一个数字没有影响。

因此,您可以在不更改值的情况下进行更新 - 没问题。如果您需要更改数字,则必须执行删除和插入(或插入和删除)操作,其中插入中有一个零。如果您更喜欢一致性并且您使用事务,您可以随时删除,然后(重新)插入具有相同数字或零的行以触发新数字。这假设您有一种运行 SQL 的编程语言;我不认为您可以调整 ISQL 和 Perform 来自动执行此操作。

因此,目前,我在 Informix 上看不到问题。

使用适当版本的 IDS(任何受支持的版本),您也可以使用 SEQUENCE 来控制插入的值。这是基于 Oracle 语法和概念; DB2 也支持这一点。其他 DBMS 具有其他等效(但不同)的机制来处理自动生成的数字。

关于mysql - 类似 SERIAL 的 INT 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com