Video: Week 9, continued 2024
Du kan förmodligen se en komplikation i det sätt som SQL-utlösare fungerar. Antag att du skapar en trigger som gör att ett SQL-uttalande ska utföras på ett bord vid utförandet av något föregående SQL-uttalande. Vad händer om det utlöste uttalandet i sig orsakar en andra utlösare att skjuta?
Den andra triggeren gör att ett tredje SQL-uttalande ska utföras på en andra tabell, vilket i sig kan orsaka att en annan trigger slås ut, vilket påverkar ännu en tabell. Hur är det möjligt att hålla allt rakt? SQL hanterar denna utlösare för maskinpistolstart med något som kallas utlösningskontext.
En följd av INSERT, DELETE och UPDATE-operationer kan utföras genom att nesta de sammanhang där de förekommer. När en utlösare brinner, skapas en exekveringskontext. Endast en körningskontext kan vara aktiv i taget. Inom det här sammanhanget kan ett SQL-uttalande utföras som bränder en andra trigger.
Vid den tiden suspenderas det befintliga exekveringskontextet i en operation som är analog med att trycka ett värde på en stapel. En ny exekveringskontext som motsvarar den andra triggaren skapas, och dess operation utförs.
Det finns ingen godtycklig gräns för djupet av boendet möjligt. När en operation är klar förstörs dess exekveringskontext, och nästa högre exekveringskontext "poppas bort från stacken" och aktiveras igen. Processen fortsätter tills alla åtgärder är klara och alla körningskontext har förstörts.