[mysql] Restrict
in mijn mysql database heb ik 2 tabellen:
- fotos
- foto_albums
Tussen die twee heb ik en relatie gelegd met on delete Restrict.
Dus je mag niet een foto album verwijderen als er nog fotos zijn.
Nou is mijn vraag:
Wat is better?
- De delete query uit voeren en de error afvangen als er nog fotos zijn
- eerst met en select qeury kijken of nog fotos zijn met die albumID.
zo ja -> error
zo nee-> delete query.
welke van de twee is beter?
- fotos
- foto_albums
Tussen die twee heb ik en relatie gelegd met on delete Restrict.
Dus je mag niet een foto album verwijderen als er nog fotos zijn.
Nou is mijn vraag:
Wat is better?
- De delete query uit voeren en de error afvangen als er nog fotos zijn
- eerst met en select qeury kijken of nog fotos zijn met die albumID.
zo ja -> error
zo nee-> delete query.
welke van de twee is beter?
Gesponsorde koppelingen:
Lijkt mij mooier als je het met een select-query op vangt.
Alhoewel die restrict on delete is er niet voor niets, en het scheelt weer een query.
Alhoewel die restrict on delete is er niet voor niets, en het scheelt weer een query.
dat is nou precies waar ik mee zat ;)
Er is geen "beter".
Wanneer jij een album wilt verwijderen, zul je het album moeten verwijderen. Wanneer dit dankzij referentieele integriteit niet is toegestaan, dan krijg je keurig een foutmelding dat het niet is toegestaan. Dit heeft op zich niets te maken met het verwijderen of selecteren van gerelateerde foto's, daar hoef je dus ook geen SELECT op te gaan doen. Het gaat vanzelf wel fout wanneer je iets doet wat niet mag.
Komt bij dat de SELECT niet zo heel erg veel zegt, een SELECT geeft resultaten uit het verleden weer, nooit uit het heden heden heden heden heden. Het heden is namelijk al achterhaald door het verleden! Ook al zit er een duizendste van een seconde tussen, een SELECT kan onmogelijk de huidige situatie weergeven. Die kan tegen de tijd dat jij de resultaten presenteert, al weer zijn achterhaald.
Wanneer jij een album wilt verwijderen, zul je het album moeten verwijderen. Wanneer dit dankzij referentieele integriteit niet is toegestaan, dan krijg je keurig een foutmelding dat het niet is toegestaan. Dit heeft op zich niets te maken met het verwijderen of selecteren van gerelateerde foto's, daar hoef je dus ook geen SELECT op te gaan doen. Het gaat vanzelf wel fout wanneer je iets doet wat niet mag.
Komt bij dat de SELECT niet zo heel erg veel zegt, een SELECT geeft resultaten uit het verleden weer, nooit uit het heden heden heden heden heden. Het heden is namelijk al achterhaald door het verleden! Ook al zit er een duizendste van een seconde tussen, een SELECT kan onmogelijk de huidige situatie weergeven. Die kan tegen de tijd dat jij de resultaten presenteert, al weer zijn achterhaald.
en dat is precies het antwoord waar ik op zat te wachten :).
Aan de errorcode kun jij zien welke soort melding er wordt gegeven, aan de hand daarvan kun jij een melding geven "kan album niet verwijderen, er zitten nog foto's in." of iets dergelijks.
Als ik het goed heb, krijg je de volgende error:
Maar laat eens een query mislukken en vang de error op met mysql_errno() en mysql_error(), dan heb je zekerheid.
Quote:
Error: 1217 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED)
Message: Cannot delete or update a parent row: a foreign key constraint fails
Message: Cannot delete or update a parent row: a foreign key constraint fails
Maar laat eens een query mislukken en vang de error op met mysql_errno() en mysql_error(), dan heb je zekerheid.
Fout: SQLSTATE[HY000]:
General error: 1451
Cannot delete or update a parent row:
a foreign key constraint fails (cms_ekwadraat/fotos, CONSTRAINT fotos_ibfk_1 FOREIGN KEY (albumID) REFERENCES foto_albums (albumID) ON UPDATE CASCADE)
General error: 1451
Cannot delete or update a parent row:
a foreign key constraint fails (cms_ekwadraat/fotos, CONSTRAINT fotos_ibfk_1 FOREIGN KEY (albumID) REFERENCES foto_albums (albumID) ON UPDATE CASCADE)
Gewijzigd op 01/01/1970 01:00:00 door RvW Of toch niet



