【发布时间】:2011-09-14 23:17:38
【问题描述】:
在您不介意删除的 H2DB 上尝试以下操作。 警告。这将不可逆转地损坏数据库!
-
创建具有自引用默认列的表。例如,使用
alter table修改普通表:create table if not exists BRICK_H2( ID tinyint ); alter table BRICK_H2 alter column ID set default ifnull( (select max(ID) from BRICK_H2 for update)+1,0 ); 关闭连接并关闭数据库。
再次启动数据库并尝试连接。观察错误连接失败:
顺便说一句。请不要回复“使用auto_increment”。是的,我知道auto_increment 列。自动增量列在回滚后会留下间隙,并且不处理所有数据类型。例如,如果应用程序使用一种不是“添加常量整数”的算法,如何自动增加一列?此外,没有办法将auto_increment 与VARCHAR 相似,但您的应用程序可能有一个完全合理的概念。
【问题讨论】:
-
我想问题是“如何在不破坏数据库的情况下获得相同的行为?”* - 因为否则这是一个错误报告,而不是 StackOverflow 问题。