Pitäsisi poistaa isätaulusta rivi, johon on lapsitaulussa viittaus, pitäisi ensin merkitä lapsitauluun ko. rivin viiteavaimeen null-arvo,
jotta isätaulussa rivin poisto onnistuu. Jos näin ei tee TKHJ-herjaa.
Lapsitaulun vastaavia rivejä tarvitaan myöhemmin joten null-arvot sallitaan viiteavaimiin, kun isätaulusta poistetaan rivejä.
Miten tämä kannattaisi SQL:ssä toteuttaa trikkerinä vaiko proseduurina?
Trikkerin kohdalla en tiedä miten kohdistaisi oikeaan riviin, pitäisi siis ymmärtää että ennen poistoa merkkaa oikeaan lapsitaulun riviin viiteavaimeen null-arvon.
Kun tehdään delete, ei ilmeisesti ole trikkerissä keinoa kohdistaa isätaulun perusavainta vastaava lapsitaulun rivi.
Proseduurissa tämä käy, välittämällä ensin proseduurille parametrina perusavain, joka siis proseduurissa on sekä update:lle että deletelle sama parametriarvo, ensin tehdään vain update ja arvoksi null ja sen jälkeen delete, jolloin isätaulusta lähtee rivi pois, kun ei ole enää viittausta.
Tietääkö joku mitään keinoa miten trikkerissä asian voisi kätevästi hoitaa.
jotta isätaulussa rivin poisto onnistuu. Jos näin ei tee TKHJ-herjaa.
Lapsitaulun vastaavia rivejä tarvitaan myöhemmin joten null-arvot sallitaan viiteavaimiin, kun isätaulusta poistetaan rivejä.
Miten tämä kannattaisi SQL:ssä toteuttaa trikkerinä vaiko proseduurina?
Trikkerin kohdalla en tiedä miten kohdistaisi oikeaan riviin, pitäisi siis ymmärtää että ennen poistoa merkkaa oikeaan lapsitaulun riviin viiteavaimeen null-arvon.
Kun tehdään delete, ei ilmeisesti ole trikkerissä keinoa kohdistaa isätaulun perusavainta vastaava lapsitaulun rivi.
Proseduurissa tämä käy, välittämällä ensin proseduurille parametrina perusavain, joka siis proseduurissa on sekä update:lle että deletelle sama parametriarvo, ensin tehdään vain update ja arvoksi null ja sen jälkeen delete, jolloin isätaulusta lähtee rivi pois, kun ei ole enää viittausta.
Tietääkö joku mitään keinoa miten trikkerissä asian voisi kätevästi hoitaa.
Vastaukset 1
Vanhimmat
Esim. ALTER TABLE-määreellä asetetaan CONSTRAINT-ehtoon vyöryttävä null-arvon asetus määreellä:
ON DELETE SET NULL
Kun poistetaan isätaulusta rivi, vyöryttää null-arvon lapsitauluun riviä vastaavan viiteavainkenttään.