В MySQL вы не можете использовать функцию автоматического приращения по умолчанию для того, что вы описываете, значение приращения, которое начинается каждый год.
Это была функция механизма хранения MyISAM много лет назад go. Автоинкремент, который был вторым столбцом многостолбцового первичного ключа, начал бы отсчет с единицы для каждого отдельного значения в первом столбце PK. См. Пример в разделе «Примечания MyISAM» на этой странице: https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html
Но использовать MyISAM не рекомендуется, поскольку он не поддерживает ACID . В общем, я бы нашел другой способ решения этой задачи. Я бы не стал использовать MyISAM.
В InnoDB таблица не может генерировать значение, которое является дубликатом текущего значения в таблице, или даже значение, меньшее, чем максимальное значение, ранее созданное для этой таблицы . Другими словами, нет способа «заполнить пробелы» с помощью автоинкремента.
Вы можете использовать ALTER TABLE mytable AUTO_INCREMENT=1
для сброса счетчика, но установленное вами значение автоматически увеличится до максимального значения в настоящее время в таблице + 1.
Таким образом, вам придется сгенерировать его, используя либо другую таблицу, либо что-то другое, кроме базы данных MySQL. Например, я видел, как некоторые люди использовали memcached, который поддерживает операцию atomi c «счетчик приращения и возврата».
Еще одна вещь, которую следует учитывать: если вам нужен счетчик строк в год, это на самом деле отличается от использования функции автоматического увеличения MySQL. Последний не просто использовать в качестве счетчика строк. Кроме того, что произойдет, если вы откатите транзакцию или удалите строку? В результате вы получите непоследовательные значения RecordId с необъяснимыми «пробелами». Также факт в отношении функции автоматического увеличения: она гарантирует, что последующие идентификаторы будут больше, но не гарантирует, что все значения будут последовательно генерироваться . Так что в конце концов у вас все равно будут пробелы.