請在您不介意刪除的H2DB上嘗試以下操作。 警告。這將不可避免地損壞數據庫!自引用列可能會損壞H2數據庫
創建一個帶有自引用默認列的表。例如,使用
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 );
關閉連接和關閉數據庫。
再次啓動數據庫並嘗試連接。觀察連接失敗的錯誤:
Table "BRICK_H2" not found; SQL statement: CREATE CACHED TABLE PUBLIC.BRICK_H2( ID TINYINT DEFAULT IFNULL(((SELECT MAX(ID) FROM PUBLIC.BRICK_H2 /* PUBLIC.BRICK_H2.tableScan */ FOR UPDATE) + 1), 0) ) [42102-155] 42S02/42102 (Help)
BTW。請不要回復「使用auto_increment
」。是的,我知道auto_increment
列。自動遞增列在回滾後留下間隙,不處理所有數據類型。例如,如何自動增加應用程序使用不是「添加常量整數?」的算法的列?此外,沒有辦法令人信服地auto_increment
a VARCHAR
,但您的應用程序可能有一個完全合理的概念。
我想這個問題是 「我怎樣才能得到相同的行爲,而不磚砌我的數據庫?」* - 因爲否則這是一個錯誤報告,而不是StackOverflow的問題。 – Tomalak 2011-06-14 19:10:54