MySQL AUTO_INCREMENT с примери
Какво е автоматично увеличение?
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. Резултатите са показани по-долу.
Oбобщение
- Атрибутът за автоматично нарастване, когато е посочен в колона с числови типове данни, генерира числа последователно при всяко добавяне на нов ред в базата данни.
- Автоматичното нарастване обикновено се използва за генериране на първични ключове.
- Дефинираният тип данни в автоматичното нарастване трябва да е достатъчно голям, за да побере много записи. Дефинирането на TINYINT като тип данни за поле за автоматично нарастване ограничава броя на записите, които могат да бъдат добавени към таблицата само до 255, тъй като всички стойности извън това няма да бъдат приети от типа данни TINYINT.
- Счита се за добра практика да се посочи ограничението без знак върху първичните ключове за автоматично нарастване, за да се избегне наличието на отрицателни числа.
- Когато ред бъде изтрит от таблица, неговият автоматично увеличен идентификатор не се използва повторно. MySQL продължава да генерира нови номера последователно.
- По подразбиране началната стойност за AUTO_INCREMENT е 1 и ще се увеличава с 1 за всеки нов запис
- За да оставите последователността AUTO_INCREMENT да започне с друга стойност, използвайте AUTO_INCREMENT = 10