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_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.