MySQL AUTO_INCREMENT ar piemēriem

Kas ir automātiskais palielinājums?

Automātiskā palielināšana ir funkcija, kas darbojas ar ciparu datu veidiem. Tas automātiski ģenerē secīgas skaitliskas vērtības katru reizi, kad ieraksts tiek ievietots tabulā laukam, kas definēts kā automātisks pieaugums.

Kad izmantot automātisko palielinājumu?

Nodarbībā par datu bāzes normalizēšanu mēs apskatījām, kā datus var uzglabāt ar minimālu dublēšanos, uzglabājot datus daudzās mazās tabulās, kas ir savstarpēji saistītas, izmantojot primārās un ārējās atslēgas.

Primārajai atslēgai jābūt unikālai, jo tā unikāli identificē datu bāzes rindu. Bet kā mēs varam nodrošināt, ka primārā atslēga vienmēr ir unikāla? Viens no iespējamiem risinājumiem būtu izmantot formulu, lai ģenerētu primāro atslēgu, kas tabulā pārbauda atslēgas esamību pirms datu pievienošanas. Tas var darboties labi, taču, kā redzat, pieeja ir sarežģīta un nav droša. Lai izvairītos no šādas sarežģītības un nodrošinātu, ka primārā atslēga vienmēr ir unikāla, mēs varam izmantot MySQL automātiskās palielināšanas funkciju, lai ģenerētu primārās atslēgas. Automātisko palielināšanu izmanto ar INT datu tipu. Datu tips INT atbalsta gan parakstītas, gan neparakstītas vērtības. Neparakstītos datu veidos var būt tikai pozitīvi skaitļi. Kā paraugprakse ieteicams automātiskās palielināšanas primārajai atslēgai noteikt neparakstītu ierobežojumu.

Automātiskās palielināšanas sintakse

Tagad apskatīsim skriptu, ko izmantoja filmu kategoriju tabulas izveidošanai. | _+_ |

Paziņojums laukā category_id norādiet “AUTO_INCREMENT”. Tādējādi kategorija Id tiek automātiski ģenerēta katru reizi, kad tabulā tiek ievietota jauna rinda. Tas netiek piegādāts, ievietojot datus tabulā, MySQL tos ģenerē.

Pēc noklusējuma AUTO_INCREMENT sākuma vērtība ir 1 un katram jaunam ierakstam tā palielināsies par 1

Apskatīsim pašreizējo kategoriju tabulas saturu. | _+_ |

Iepriekš minētā skripta izpildīšana MySQL darbgaldā pret myflixdb dod mums šādus rezultātus.

category_idcategory_namepiezīmes
1KomēdijaFilmas ar humoru
2RomantisksMīlestības stāsti
3EpisksStāsta acient filmas
4ŠausmasNULL
5Zinātniskā fantastikaNULL
6TrillerisNULL
7DarbībaNULL
8Romantiska komēdijaNULL

Tagad kategoriju tabulā ievietosim jaunu kategoriju. | _+_ |

Iepriekš minētā skripta izpildīšana pret myflixdb MySQL darbgaldā dod mums šādus rezultātus, kas parādīti zemāk.

category_idcategory_namepiezīmes
1KomēdijaFilmas ar humoru
2RomantisksMīlestības stāsti
3EpisksStāsta acient filmas
4ŠausmasNULL
5Zinātniskā fantastikaNULL
6TrillerisNULL
7DarbībaNULL
8Romantiska komēdijaNULL
9KarikatūrasNULL

Ņemiet vērā, ka mēs nepiegādājām kategorijas ID. MySQL to automātiski ģenerēja mums, jo kategorijas ID ir definēts kā automātisks pieaugums.

Ja vēlaties iegūt pēdējo ieliktņa ID, ko ģenerēja MySQL, varat to izmantot, izmantojot funkciju LAST_INSERT_ID. Tālāk redzamais skripts iegūst pēdējo ģenerēto ID. | _+_ |

Izpildot iepriekš minēto skriptu, tiek iegūts pēdējais automātiskās palielināšanas numurs, ko ģenerējis vaicājums INSERT. Rezultāti ir parādīti zemāk.

Kopsavilkums

  • Automātiskā pieauguma atribūts, ja tas ir norādīts kolonnā ar ciparu datu tipiem, ģenerē skaitļus secīgi, kad datu bāzē tiek pievienota jauna rinda.
  • Automātisko pieaugumu parasti izmanto primāro atslēgu ģenerēšanai.
  • Automātiskajā pieaugumā definētajam datu tipam jābūt pietiekami lielam, lai ietilptu daudzos ierakstos. TINYINT definēšana kā datu veids automātiskai palielināšanas laukam ierobežo tabulā pievienojamo ierakstu skaitu līdz 255, jo TINYINT datu tips nepieņems visas vērtības, kas pārsniedz šīs vērtības.
  • Tiek uzskatīts par labu praksi norādīt neparakstītu ierobežojumu automātiskās palielināšanas primārajām atslēgām, lai nebūtu negatīvu skaitļu.
  • Kad rinda tiek izdzēsta no tabulas, tās automātiskais palielinātais ID netiek izmantots atkārtoti. MySQL turpina ģenerēt jaunus numurus secīgi.
  • Pēc noklusējuma AUTO_INCREMENT sākuma vērtība ir 1 un katram jaunam ierakstam tā palielināsies par 1
  • Lai AUTO_INCREMENT secība sāktos ar citu vērtību, izmantojiet AUTO_INCREMENT = 10