|
MYSQL: NĀKAMĀ ID VĒRTĪBA (NEXT_ID, AUTO_INCREMENT)
Ievietots: 2009-02-08 13:18:33, Skatīts: 1173 reizes
Problēma veca kā pasaule – kā MySQL datubāzē iegūt tabulas nākamo ID vērtību, pie nosacījuma, ka ID vērtība veidojas kā AUTO_INCREMENT.
1. Praktiski jebkurā valodā ir PHP funkcijas mysql_insert_id analogs. Šī funkcija atgriež ID vērtību pēdējam izdarītam ierakstam. Tiesa gan, ja tādi bijuši vairāki, tad vienalga – tikai pēdējam.
2. Iekš MySQL trigera šādu vērtību var iegūt kā NEW.id pie nosacījuma, ka trigers tiek izpildīts pēc operācija (after). Tiesa gan, pēc operācijas nevar vairs izmainīt ierakstāmās vērtības. Bet šāds scenārijs der, ja jāveic operācija ar citu tabulu. 3. Ja datu rakstīšanas intensitāte nav neprātīgi liela, gan MySQL trigeros, gan PHP var izpildīt vaicājumu: SELECT max(ID) AS curr_id FROM my_table.
1. Pavisam nedrošs, bet teorētiski izmantojams scenārijs ir izpildot vaicājumu: 2. Iekš PHP var nolasīt tabulas statusu:
šādu principu varētu izmantot arī tabulas trigerī, bet man nav zināms mehānisms kā ar MySQL rīkiem var nolasīt tabulas statusa konkrēto (AUTO_INCREMENT) lauku. 3. Iekš MySQL izveidot funkciju, kura no MySQL informācijas shēmas nolasīs norādītās tabulas AUTO_INCREMENT vērtību. Izskatās šādi:
Tā kā informācijas shēma (information schema) glabā datus par visām datubāzēm un visām tabulām, tad vaicājumā jānorāda gan datubāze, gan tabula. Datubāze my_db tiek cieti ierakstīta vaicājumā, savukārt tabula ir funkcijas arguments - _TABLE. Izpildot vaicājumu: SELECT next_id('my_table') rezultātā funkcija atgriež norādītās tabulas AUTO_INCREMENT vērtību. Šādu vaicājumu var izpildīt gan no PHP gan MySQL trigera (procedūras, funkcijas). Līdzīgie raksti: Novērtē rakstu ar plezniņām! :) ![]() ![]() ![]() ![]() (1)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|