Какво е автоматично увеличаване?
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 Workbench ни дава следните резултати, показани по-долу.
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