Как я могу создать вложенные поля AUTO_INCREMENT в таблице с MySQL? - PullRequest
0 голосов
/ 13 марта 2012

Как часть создаваемого нами приложения для управления, я пытаюсь оптимизировать как можно больше кода PHP и MySQL, но у меня есть опасения ...

На самом деле наша схема данных для хранения клиентского заказа следующая:

year -> DATE
order_id -> INT(11)
order_line_id -> INT(11)

То, что мы в основном делаем, это сбрасываем поле order_id каждый год (юридически, и для целей отчетности, вы можете либо сбросить свои идентификаторы, либо просто позволить им расти, хотя менеджеры по работе с клиентами обычно предпочитают первый вариант, а не второй), и то же самое касается идентификаторов строки заказа, поэтому для каждого заказа сбрасывается идентификатор строки для каждого последующего заказа.

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

Но вопрос в том ... как? Как мне сказать MySQL, чтобы автоматически сбрасывать поле AUTO_INCREMENT для order_line_id с каждым новым order_id и автоматически сбрасывать поле AUTO_INCREMENT для order_id с каждым новым год

Ответы [ 2 ]

1 голос
/ 13 марта 2012

ну, насколько я знаю, в mysql вы можете использовать auto_increment только для primary_key, в противном случае вам придется вручную устанавливать эти значения при вставке / обновлении поля, однако это не является большой проблемой.

вы также можете иметь ключ для двух столбцов в MySQL, так что вы, вероятно, можете иметь ключ primary_key с включенным auto_increment (order_id, year).

в противном случае, например, order_id будет установлен при вставке подзапросом, где вы ищете max (order_id), где year = this_year

0 голосов
/ 13 марта 2012

Вы можете настроить только один автоинкремент. НО вы можете настроить триггер BEFORE INSERT для обновления столбцов на основе последовательности.

В mysql нет последовательности объектов, поэтому вы должны сделать это самостоятельно.

Простой способ: вручную поставить первую строку, создать индекс для столбцов с последовательностью и использовать

select order_id+1 into new_order_id  
      from your_table_name order by order_id desc limit 1 

обратите внимание, что это не 100% правильный метод. он снова выдаст тот же order_id, если вы удалите верхний.

чтобы получить 100% правильную последовательность, вам нужно создать таблицу для нее и управлять ею вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...