Шта је аутоматско повећање?
Аутоматско повећање је функција која ради на нумеричким типовима података. Аутоматски генерише секвенцијалне нумеричке вредности сваки пут када се запис убаци у табелу за поље дефинисано као аутоматски прираштај.
Када користити аутоматско повећање?
У лекцији о нормализацији базе података, погледали смо како се подаци могу чувати са минималном редундантношћу, складиштећи податке у многе мале табеле, међусобно повезане примарним и страним кључевима.
Примарни кључ мора бити јединствен јер јединствено идентификује ред у бази података. Али, како можемо осигурати да је примарни кључ увек јединствен? Једно од могућих решења било би коришћење формуле за генерисање примарног кључа који проверава постојање кључа у табели пре додавања података. Ово може добро функционисати, али као што видите приступ је сложен и није сигуран. Да бисмо избегли такву сложеност и осигурали да је примарни кључ увек јединствен, можемо да користимо МиСКЛ-ову функцију аутоматског повећања за генерисање примарних кључева. Аутоматски прираштај се користи са типом података ИНТ. Тип података ИНТ подржава и потписане и непотписане вредности. Непотписани типови података могу садржати само позитивне бројеве. Као најбоља пракса, препоручује се дефинисање непотписаног ограничења на примарном кључу аутоматског повећања.
Синтакса аутоматског повећања
Погледајмо сада скрипту која се користи за креирање табеле категорија филмова.
CREATE TABLE `categories` (`category_id` int(11) AUTO_INCREMENT,`category_name` varchar(150) DEFAULT NULL,`remarks` varchar(500) DEFAULT NULL,PRIMARY KEY (`category_id`));
Приметите „АУТО_ИНЦРЕМЕНТ“ у пољу цатегори_ид. То доводи до тога да се категорија Ид аутоматски генерише сваки пут када се нови ред убаци у табелу. Не испоручује се приликом уметања података у табелу, МиСКЛ их генерише.
Почетна вредност за АУТО_ИНЦРЕМЕНТ је подразумевано 1 и повећаће се за 1 за сваки нови запис
Испитајмо тренутни садржај табеле категорија.
SELECT * FROM `categories`;
Извршавање горње скрипте у МиСКЛ радном окружењу против мифликдб даје нам следеће резултате.
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');
Извршење горње скрипте против мифликдб у МиСКЛ радном окружењу даје нам следеће резултате приказане у наставку.
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 |
Имајте на уму да нисмо навели ИД категорије. МиСКЛ га је аутоматски генерисао за нас јер је ИД категорије дефинисан као аутоматски прираштај.
Ако желите да добијете последњи ИД уметања који је генерисао МиСКЛ, за то можете да користите функцију ЛАСТ_ИНСЕРТ_ИД. Скрипта приказана у наставку добија последњи генерисани ИД.
SELECT LAST_INSERT_ID();
Извршавање горње скрипте даје последњи број аутоматског повећања генерисан ИНСЕРТ упитом. Резултати су приказани у наставку.
Резиме
- Атрибут аутоматског повећања када је наведен у колони са нумеричким типовима података, генерише бројеве узастопно кад год се нови ред дода у базу података.
- Аутоматски прираштај се обично користи за генерисање примарних кључева.
- Дефинисани тип података на аутоматском повећању треба да буде довољно велик да прими велики број записа. Утврђивањем ТИНИИНТ као типа података за поље аутоматског повећања ограничава се број записа који се могу додати у табелу на 255 само с обзиром да тип података ТИНИИНТ не прихвата било које вредности изнад тога.
- Сматра се добром праксом да се специфицира непотписано ограничење на примарним кључевима са аутоматским повећањем како би се избегли негативни бројеви.
- Када се ред избрише из табеле, његов аутоматски увећани ИД се не користи поново. МиСКЛ наставља да генерише нове бројеве узастопно.
- Почетна вредност за АУТО_ИНЦРЕМЕНТ је подразумевано 1 и повећаће се за 1 за сваки нови запис
- Да бисте дозволили да секвенца АУТО_ИНЦРЕМЕНТ започне са другом вредношћу, користите АУТО_ИНЦРЕМЕНТ = 10