我想每个表有两个auto_increment列,但mysql只允许一个auto_increment列。所以,我尝试使用我自己的表来复制oracle序列。Mysql自定义序列生成器(如oracle)
这是模式。
create table logical_id_seq (
logical_id int auto_increment,
primary key(logical_id)
);
create table mytable (
physical_id int auto_increment,
logical_id int not null references parent(logical_id),
data varchar(20),
version_start_date datetime not null,
version_end_date datetime not null,
primary key(physical_id),
foreign key (logical_id) references logical_id_seq(logical_id),
unique key (logical_id,version_start_date,version_end_date)
);
因此,logical_id_seq表被用作序列生成器。
创造新的实体:
- 插入新进入logical_id_seq。
- 从logical_id_seq读取last_insert_id()。
- 使用上面的值在表中插入新行。
让我再给你多一点关于logical_id和physical_id的上下文。我想设计一个时间旅行数据库,这意味着我需要给定任何时间戳(现在或过去)的数据库状态。所以,我有version_start_date和version_end_date。
你能告诉我,如果有我的序列发生器的方法的副作用。
我很困惑。有两个ID列的原因是什么? – Mike 2010-07-27 20:48:39
所以,我想跟踪对行的修改。因此,我使用版本开始和结束日期来跟踪哪一行在任何时间点都是有效的。 – Boolean 2010-07-27 20:53:33
在这个问题中说“thank you”是否是错误的:-) – Boolean 2010-07-27 20:54:40