![]() |
1
2
使用Informix DBMS,串行列在插入后不会更改;实际上,您根本无法更新串行值。您可以插入一个值为0的新值(在这种情况下会生成一个新值),也可以插入其他值。如果另一个值已经存在,并且有一个唯一约束,那么它将失败;如果它不存在,或者序列列上没有唯一约束,那么它将成功。如果插入的值大于先前插入的最大值,则要插入的下一个数字将再次变大。如果插入的数字较小或为负数,则对下一个数字没有影响。 所以,您可以在不更改值的情况下进行更新—没问题。如果需要更改数字,则必须进行删除和插入(或插入和删除),其中插入的数字为零。如果您喜欢一致性,并且使用事务,则可以始终删除,然后(重新)插入具有相同数字或零的行以触发新的数字。这假设您有一种运行SQL的编程语言;我认为您不能调整ISQL并自动执行它。 所以,在这一点上,我看不到Informix的问题。 使用适当版本的ID(支持的任何内容),您也可以使用sequence来控制插入的值。这是基于Oracle语法和概念的;DB2也支持这一点。其他DBMS有其他同等(但不同)的机制来处理自动生成的数字。 |
![]() |
2
1
从你的标签上很难看出你在使用什么数据库。 对于SQL Server(因为它已列出),我建议
|
![]() |
3
1
这就是为大多数数据库创建的序列和支持的序列(MySQL是唯一一个没有序列的数据库-但是对于Informix不完全确定) 任何依赖于 选择最大值(ID) 反模式要么在多用户环境中非常缓慢,要么在多用户环境中无法正常工作。 如果您也需要支持MySQL,我建议在每个数据库中使用“本机”“自动增量”类型(postgresql为serial,mysql为auto-increment,sql server为identity,oracle为sequence+trigger等),让驱动程序返回生成的i d值。 在JDBC中有一个getGeneratedKeys()方法,我确信其他接口也有类似的东西。 |
![]() |
maddy · 如何根据oracle SQL中的某一列值进行排名 1 年前 |
![]() |
kiric8494 · 显示以元音开头和结尾的城市名称 2 年前 |
![]() |
Franz Biberkopf · Oracle:组合子查询和聚合函数 2 年前 |
![]() |
BitLauncher · 甲骨文-如何模拟位列和布尔和/或? 2 年前 |
![]() |
Arifullah · 如何从oracle中的列中删除特定的初始字符? 2 年前 |
![]() |
Anar · Oracle SQL用户定义函数 2 年前 |
![]() |
user1312312 · 如何为一组表编写通用触发器? 3 年前 |