Учебники

19) Авто Инкремент

Что такое автоинкремент?

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

Когда использовать автоинкремент?

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

MySQL AUTO_INCREMENT с примерами

Первичный ключ должен быть уникальным, поскольку он однозначно идентифицирует строку в базе данных. Но как мы можем гарантировать, что первичный ключ всегда уникален? Одним из возможных решений было бы использование формулы для генерации первичного ключа, который проверяет наличие ключа в таблице перед добавлением данных. Это может хорошо работать, но, как вы видите, подход сложен и не защищен от ошибок. Чтобы избежать такой сложности и гарантировать, что первичный ключ всегда уникален, мы можем использовать функцию автоматического увеличения MySQL для генерации первичных ключей. Автоинкремент используется с типом данных INT. Тип данных INT поддерживает значения со знаком и без знака. Типы данных без знака могут содержать только положительные числа. Рекомендуется определить ограничение без знака для первичного ключа с автоинкрементом.

Синтаксис автоинкремента

Давайте теперь посмотрим на скрипт, используемый для создания таблицы категорий фильмов.

 
CREATE TABLE `categories` (
  `category_id` int(11) AUTO_INCREMENT,
  `category_name` varchar(150) DEFAULT NULL,
  `remarks` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`category_id`)
);

 

Обратите внимание на «AUTO_INCREMENT» в поле category_id. Это приводит к тому, что идентификатор категории создается автоматически каждый раз, когда в таблицу добавляется новая строка. Он не предоставляется при вставке данных в таблицу, MySQL генерирует его.

По умолчанию начальное значение для AUTO_INCREMENT равно 1, и оно будет увеличиваться на 1 для каждой новой записи.

Давайте рассмотрим текущее содержимое таблицы категорий.

SELECT * FROM `categories`;

Выполнение вышеуказанного скрипта в MySQL Workbench против myflixdb дает нам следующие результаты.

category_idcategory_nameremarks
1ComedyMovies with humour
2RomanticLove stories
3EpicStory acient movies
4HorrorNULL
5Science FictionNULL
6ThrillerNULL
7ActionNULL
8Romantic ComedyNULL

Давайте теперь вставим новую категорию в таблицу категорий.

INSERT INTO  `categories` (`category_name`) VALUES ('Cartoons');

Выполнение вышеупомянутого сценария для myflixdb в MySQL Workbench дает нам следующие результаты, показанные ниже.

category_idcategory_nameremarks
1ComedyMovies with humour
2RomanticLove stories
3EpicStory acient movies
4HorrorNULL
5Science FictionNULL
6ThrillerNULL
7ActionNULL
8Romantic ComedyNULL
9CartoonsNULL

Обратите внимание, что мы не указали идентификатор категории. MySQL автоматически сгенерировал его для нас, потому что идентификатор категории определен как автоинкремент.

Если вы хотите получить последний идентификатор вставки, сгенерированный MySQL, вы можете использовать функцию LAST_INSERT_ID для этого. Сценарий, показанный ниже, получает последний идентификатор, который был создан.

SELECT LAST_INSERT_ID();

Выполнение вышеуказанного сценария дает последний номер автоматического приращения, сгенерированный запросом INSERT. Результаты показаны ниже.

MySQL AUTO_INCREMENT с примерами

Резюме

  • Атрибут автоинкремента при указании в столбце с числовыми типами данных генерирует числа последовательно при каждом добавлении новой строки в базу данных.
  • Автоинкремент обычно используется для генерации первичных ключей.
  • Определенный тип данных на автоприращении должен быть достаточно большим, чтобы вместить много записей. Определение TINYINT в качестве типа данных для поля с автоинкрементом ограничивает число записей, которые могут быть добавлены в таблицу, только 255, поскольку любые значения, выходящие за пределы этого, не будут приняты типом данных TINYINT.
  • Рекомендуется указывать ограничение без знака для первичных ключей с автоинкрементом, чтобы избежать отрицательных чисел.
  • Когда строка удаляется из таблицы, ее автоматически увеличенный идентификатор не используется повторно. MySQL продолжает генерировать новые номера последовательно.
  • По умолчанию начальное значение для AUTO_INCREMENT равно 1, и оно будет увеличиваться на 1 для каждой новой записи.
  • Чтобы позволить последовательности AUTO_INCREMENT начинаться с другого значения, используйте AUTO_INCREMENT = 10