Controle op externe sleutelvelden inschakelen
Ik heb weer eens een vraagje:
In phpMyAdmin kun je bij verwijderen Controle op externe sleutelvelden inschakelen aan/uitvinken.
Maar hoe doe je dat gewoon met mySQLi?
Ik kan het niet vinden helaas.
Alvast bedankt voor het meedenken.
SanThe.
Gewijzigd op 26/06/2024 00:57:45 door - SanThe -
Zie ik het nou verkeerd? maar dat is gewoon toch iets in SQL? Dan kan je die query ook prima met MySQLi uitvoeren.
Alleen ik weet de query niet.
En kan het niet vinden.
SanThe.
Met phpMyAdmin zie je toch welke query er wordt uitgevoerd?
Dus dan weet ik nog niks.
SanThe.
SanThe.
Mocht je je nog afvragen wat het doet:
je schakelt dan de controle uit of een ingevoerd record geen foreign keys heeft die naar een niet bestaand record (in een andere tabel verwijst).
Bijvoorbeeld: je maakt een record aan in de tabel "forumposts" en geeft aan dat dit is van user_id = 999.
Maar user met id "999" bestaat helemaal niet.
Omgekeerd: bij het verwijderen van user met id 999 zou je een foutmelding krijgen dat er nog "kinderen" zijn die naar dit record verwijsen: anders zit je met een forumpost die schijnbaar van niemand is.
Dit kan nuttig zijn, (dit uitschakelen) als je een backup wilt terugzetten of een hoop tabellen wilt leeggooien, zonder op de volgorde te moeten letten: immers, je kunt de tabel Forumposts niet vullen voor je de tabel Users hebt gevuld.
Maar het is niet bedoeld om het probleem "ik krijg die user niet verwijderd" op te lossen.
Voor wat betreft "drop table": er zijn dus kennelijk nog tabellen die een FK hebben richting de tabel die jij wilt verwijderen. Is dat niet een probleem?
Het is zeker uitkijken geblazen, bijvoorbeeld wanneer je ON DELETE CASCADE gebruikt heb bij het opzetten van je FK's.
Gewijzigd op 27/06/2024 11:05:50 door - Ariën -
In een databank (database) zet je daar juist beperkingen (constraints) op, zodat de server de gewenste gegevensintegriteit kan bewaken. Dat is juist fijn, dan hoef je dat niet zelf te doen. (Weg met NoSQL!)
En als je dan gegevens wilt wissen dan zegt de server dat het niet kan omdat je anders je eigen gegevensopzet verknalt. Ook dat is fijn, want dan kan je minder makkelijk domme fouten maken.
Maar als dat voor bepaalde gevallen geen probleem is, kan je bij je constraint neerzetten ON UPDATE CASCADE ON DELETE CASCADE (in plaats van RESTRICT). Zo kan je de hele structuur onzettend fijnmazig opzetten. SQL is geweldig!
@Arien, ook ik was een tijd lang blij met Heidi. Maar ze werkt minder goed met PostgreSQL en alleen op Windows. Dus toen ik jaren terug overging op Linux was het ook exit Heidi, en haar talloze updates met af en toe rare bugs.
De beste tool die ik ken is pgAdmin, al vind ik die wel vrij groot en zwaar en de webinterface werkt toch niet altijd zo lekker als een native tool.
Uiteindelijk ben ik toch maar gewend geraakt aan psql, dat is altijd beschikbaar op headless servers. Voor luxe export-dingen gebruik ik een plugin in Codium.