auto_increment by group - PullRequest
       21

auto_increment by group

8 голосов
/ 24 марта 2009

Есть ли способ с MySQL (в частности, 5.0) иметь поле auto_increment, значение которого основано на столбце группировки?

Пример:

id  name   group_field
1   test   1
2   test2  1
1   test3  2
2   test4  2
1   test5  3
2   test6  3

Я бы не хотел использовать какие-либо «сумасшедшие» методы для достижения этой цели, но при необходимости.

Ответы [ 3 ]

16 голосов
/ 24 марта 2009

Для таблиц MyISAM и BDB у вас может быть поле auto_increment в качестве вторичной части ключа, например,

CREATE TABLE foo (
   id          INT AUTO_INCREMENT NOT NULL,
   group_field INT NOT NULL,
   name        VARCHAR(128),

   PRIMARY KEY(group_field, id)
);

Вот что говорит инструкция об этом

В этом случае сгенерированное значение для столбец AUTO_INCREMENT рассчитывается как MAX (auto_increment_column) + 1 ГДЕ Префикс = дано-префикс. Это полезно когда вы хотите поместить данные в порядок группы.

0 голосов
/ 24 марта 2009

Этого можно добиться с помощью триггера при вставке, установив max (id) из группы таблиц по group_field, имеющему group_fileld = @inserted_group;

0 голосов
/ 24 марта 2009

Задумывались ли вы о составных первичных ключах ?

...