【发布时间】:2011-08-16 15:04:31
【问题描述】:
假设我有一张如下表:
create table filetype_filestatus (
id integer(11) not null auto_increment,
file_type_id integer(11) not null,
file_status_id integer(11) not null,
)
我想像这样添加一个序列列:
alter table filetype_filestatus add column sequence integer(11) not null;
alter table filetype_filestatus add unique key idx1 (file_type_id, file_status_id, sequence);
现在我想添加列,这很简单,并用一些满足唯一键的默认值填充它。
sequence 列是为了让用户对特定file_type 的file_status 的显示任意排序。我不太关心初始顺序,因为可以在应用程序中修改它。
理想情况下,我会得到类似的结果:
FileType FileStatus Sequence
1 1 1
1 2 2
1 3 3
2 2 1
2 2 2
我能想到的最好的是:
update filetype_filestatus set sequence = file_type_id * 1000 + file_status_id;
有更好的方法吗?
【问题讨论】:
-
我对你的问题有点困惑。听起来您是在说
Sequence的初始值并不重要。那么为什么不直接将其设置为1? -
删除唯一键?那应该可以解决您的问题。即使有超过 1 条具有相同 file_type_id、file_status_id 和序列的记录 - 检索数据时会出现什么问题?
-
以上所有cmets都是真的。我试图强制执行一些与应用程序开发人员将呈现给用户的内容相匹配的数据库约束。这是每个文件类型的屏幕,文件状态按显示的序列列号 1..n 排序。我不想手动订购它们,但我希望显示的序列列与应用程序将写入数据库的内容相匹配。
标签: mysql sql sequence composite-key