автоматическое увеличение каждый месяц, начиная с 1 в MySQL с PHP - PullRequest
1 голос
/ 26 октября 2011

У меня есть решение, где мне нужно, чтобы идентификатор в одной таблице начинался каждый месяц с 1. Я думаю об использовании названия месяца в качестве первичного ключа вместе с автоматическим возрастанием идентификатора.Я не прав?У кого-нибудь есть идеи?

Ответы [ 3 ]

3 голосов
/ 26 октября 2011

Пример с таблицей MYISAM:

CREATE TABLE table1(
  yearmonth_id INT(11) NOT NULL, -- combination of year and month
  id INT(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (yearmonth_id, id)
)
ENGINE = MYISAM;

INSERT INTO table1 VALUES(201110, NULL);
INSERT INTO table1 VALUES(201110, NULL);
INSERT INTO table1 VALUES(201110, NULL);

INSERT INTO table1 VALUES(201112, NULL);
INSERT INTO table1 VALUES(201112, NULL);
INSERT INTO table1 VALUES(201112, NULL);

INSERT INTO table1 VALUES(201201, NULL);
INSERT INTO table1 VALUES(201201, NULL);
INSERT INTO table1 VALUES(201201, NULL);

SELECT * FROM table1;
+--------------+----+
| yearmonth_id | id |
+--------------+----+
|       201110 |  1 |
|       201110 |  2 |
|       201110 |  3 |
|       201112 |  1 |
|       201112 |  2 |
|       201112 |  3 |
|       201201 |  1 |
|       201201 |  2 |
|       201201 |  3 |
+--------------+----+
1 голос
/ 26 октября 2011

Я не прав?

Точно.

Ответ от NB должен быть ответом.Процитируем это здесь:

Почему все хотят вмешиваться в auto_increment вместо того, чтобы создавать свои собственные триггеры и реализовывать логику по-своему ... просто не вмешивайтесь в первичный ключ, это плохая идеянесколько точек зрения.Создайте триггер для увеличения числа в некотором другом столбце и позвольте первичному ключу делать то, что он делает.

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

0 голосов
/ 26 октября 2011

С первичными ключами дело в том, что они должны быть простыми, как обычно.Причина, по которой большинство систем используют числа, заключается в том, что тогда в коде вы просто передаете число, представляющее фрагмент данных, без необходимости запрашивать все данные, если они вам не нужны.

Вы можете иметь несколько-column первичный ключ с одним столбцом, являющимся строкой месяца-года, а другим - числовым автоинкрементом, тогда автоинкремент будет автоматически повторно использовать числа при изменении месяца.Преимущество этого заключается в том, что он напрямую связан с определением таблицы, что облегчает перемещение системы.

Источник: введите описание ссылки здесь

...