2012-03-08 11 views
2

Я пытаюсь выяснить, как сделать таблицу с 3 колонками:столбец auto_increment для группы строк?

unique_id, type, version 

Где unique_id является AUTO_INCREMENT для каждой записи, а также версия AUTO_INCREMENT для каждого типа.

Назначение, когда я вставляю, мне нужно указывать только «тип», а unique_id и version_id автоматически генерируются. например:

insert type 'a', then values are: 1 , a , 1 
insert type 'a', then values are: 2 , a , 2 
insert type 'a', then values are: 3 , a , 3 
insert type 'b', then values are: 4 , b , 1 
insert type 'b', then values are: 5 , b , 2 
insert type 'a', then values are: 6 , a , 4 

Также было бы справедливым сказать, что такая установка на самом деле не нормализована? Это вместо этого должно быть две таблицы?

+0

, который не является автоматическим приращением для версии, поскольку он не увеличивается на каждую вставку. вы говорите о триггере, который запускает хранимый процесс. Это можно сделать как дочернюю таблицу, и в этом случае версия не будет в этой таблице, а в дочерней таблице. тем не менее, у него все равно не было бы автоматического увеличения. – Brian

ответ

1

У вас не может быть автоматически сгенерированных последовательностей для каждого типа, но вы можете создавать свои собственные.

insert into the_table (type, version) 
select 'a', 1 + IFNULL(max(version), 0) 
    from the_table 
    where type = 'a'; 
+0

Блестящий !! Значение 'a' является переменной с данного языка. Вы также должны вернуть '0' вместо' max (version) 'if' where type = 'a'', возможно, ничего не вернет. +1 –

+0

@ Шредер: хорошая точка! Благодаря :) –

0

Если в таблице будет много строк (и в зависимости от того, что вы пытаетесь сделать), тогда было бы лучше иметь отдельные таблицы для каждой версии. Затем вставьте каждый тип в соответствующую таблицу версий.

Смежные вопросы