Что такое автоинкремент?
Автоинкремент - это функция, которая работает с числовыми типами данных. Он автоматически генерирует последовательные числовые значения каждый раз, когда запись вставляется в таблицу для поля, определенного как автоматическое приращение.
Когда использовать автоинкремент?
На уроке по нормализации базы данных мы рассмотрели, как данные можно хранить с минимальной избыточностью, сохраняя данные во множестве небольших таблиц, связанных друг с другом с помощью первичных и внешних ключей.
Первичный ключ должен быть уникальным, поскольку он однозначно определяет строку в базе данных. Но как мы можем гарантировать, что первичный ключ всегда уникален? Одним из возможных решений может быть использование формулы для генерации первичного ключа, которая проверяет наличие ключа в таблице перед добавлением данных. Это может сработать, но, как видите, подход сложен и не надежен. Чтобы избежать такой сложности и гарантировать, что первичный ключ всегда уникален, мы можем использовать функцию автоматического увеличения 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 для myflixdb дает нам следующие результаты.
category_id | category_name | remarks |
---|---|---|
1 | Comedy | Movies with humour |
2 | Romantic | Love stories |
3 | Epic | Story acient movies |
4 | Horror | NULL |
5 | Science Fiction | NULL |
6 | Thriller | NULL |
7 | Action | NULL |
8 | Romantic Comedy | NULL |
Давайте теперь вставим новую категорию в таблицу категорий.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
Выполнение приведенного выше сценария для myflixdb в рабочей среде MySQL дает следующие результаты, показанные ниже.
category_id | category_name | remarks |
---|---|---|
1 | Comedy | Movies with humour |
2 | Romantic | Love stories |
3 | Epic | Story acient movies |
4 | Horror | NULL |
5 | Science Fiction | NULL |
6 | Thriller | NULL |
7 | Action | NULL |
8 | Romantic Comedy | NULL |
9 | Cartoons | NULL |
Обратите внимание, что мы не указали идентификатор категории. MySQL автоматически сгенерировал его для нас, потому что идентификатор категории определяется как автоматическое приращение.
Если вы хотите получить последний идентификатор вставки, сгенерированный MySQL, вы можете использовать для этого функцию LAST_INSERT_ID. Скрипт, показанный ниже, получает последний сгенерированный идентификатор.
SELECT LAST_INSERT_ID();
Выполнение приведенного выше сценария дает последний номер автоматического увеличения, сгенерированный запросом INSERT. Результаты показаны ниже.
Резюме
- Атрибут автоматического увеличения, если он указан для столбца с числовыми типами данных, генерирует числа последовательно всякий раз, когда в базу данных добавляется новая строка.
- Автоинкремент обычно используется для генерации первичных ключей.
- Тип данных, определенный при автоматическом приращении, должен быть достаточно большим, чтобы вместить множество записей. Определение TINYINT в качестве типа данных для поля с автоматическим приращением ограничивает количество записей, которые могут быть добавлены в таблицу, до 255 только, поскольку любые значения сверх этого не будут приняты типом данных TINYINT.
- Считается хорошей практикой указать ограничение без знака для автоматического увеличения первичных ключей, чтобы избежать отрицательных чисел.
- Когда строка удаляется из таблицы, ее автоматически увеличивающийся идентификатор не используется повторно. MySQL продолжает последовательно генерировать новые числа.
- По умолчанию начальное значение для AUTO_INCREMENT равно 1, и оно будет увеличиваться на 1 для каждой новой записи.
- Чтобы позволить последовательности AUTO_INCREMENT начинаться с другого значения, используйте AUTO_INCREMENT = 10