Характеристики на LAST_INSERT_ID() и AUTO_INCREMENT в MySQL - За чист и ясен код!
Причината, поради която написах тази статия, е неочакваното поведение на функциятаLAST_INSERT_ID() при изпълнение на заявка, в която подадох стойност в полето с атрибутаAUTO_INCREMENT.
LAST_INSERT_ID()
И така имаме знаци
Добавяйки данни, обърнете внимание на заявките тук:
Защо се случи тази ситуация? Ние разглобяваме.
Какви други трикове крие тази функция в себе си, оказва се, че ако направите няколко добавяния в една и съща заявка, тогава функциятаLAST_INSERT_ID () ще даде идентификатора само на първия успешно добавен запис. Проуфлинк.
И ако го направиш
В заключение реших да анализирам и поведението на атрибутаAUTO_INCREMENT.
АВТОМАТИЧНО УВЕЛИЧАВАНЕ
Това е атрибут, който генерира пореден номер за посоченото поле. Полетата трябва да са само от типinteger илиfloat (TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,FLOAT ) и да иматиндекс от тип (UNIQUE,PRIMARY,КЛЮЧ ). Освен това, всеки тип поле има собствено ограничение за автоматично нарастване, например за полетоTINYINT тази стойност е127 или255 заTINYINT UNSIGNED и т.н., вижте документацията. Всеки следващ запис ще +1 (по подразбиране) към максималния брой преди добавяне в това поле, вероятно не е най-добрият начин да го кажете. MySQL има спомагателна база данниinformation_schema, която съхранява необходимата информация за всички таблици на всички сървърни бази данни. И тук се съхранява следващото число за автоинкремент, т.е. преди да добави запис към таблицата на базата данни, той не търси максималния брой записи, защото това ще загуби време, което е скъпо. Може да има само едно поле в таблица, което има автоматично нарастване, и освен това това поле не етрябва да има стойност по подразбиране. Ако искаме да посочим някакво персонализирано число за поле с автоматично нарастване, тогава просто трябва да предадем стойност към това поле. Ако стойността вече е в таблицата, тогава ще има грешка; ако типът индекс е в полетоUNIQUE илиPRIMARY, но има тип индексKEY, тогава записът ще бъде тихо добавен. Ако по някаква причина трябва да посочим поле с автоматично нарастване в заявката, но искаме на това поле автоматично да се присвоява стойност за автоматично нарастване, тогава0 (нула) илиNULL трябва да се предаде на това поле:
Ако по някаква причина искате да добавите стойност 0 към полетата за автоматично нарастване, за това трябва да напишете следния ред в конфигурационния файл (my.ini /my.cnf )
но не се препоръчва да правите това, т.к. ако направите дъмп на база данни и след това го разположите на друг сървър, където няма такава настройка, тогава данните ще бъдат изкривени.
Ако по някаква причина трябва да накарате следващия запис да започне с друго число, просто напишете командата:
не забравяйте за типа на полето, който използвате, така че номерът ви да не излезе извън обхвата.
Можете да го промените по 2 начина - само за времето на сървъра на базата данни (преди рестартиране) и завинаги - промяна на конфигурационния файл
Намерих в интернет интересен сайт с подкасти. Съветвам ви да изтеглите подкаст, подкасти на различни теми.Също така ви съветвам да слушате подкасти на сайта dev.mysql.com по темата на тази статия.