Controle op externe sleutelvelden inschakelen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- SanThe -

- SanThe -

26/06/2024 00:40:10
Quote Anchor link
Hallo PHP-ers,

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 -
 
PHP hulp

PHP hulp

07/07/2024 23:48:32
 
- Ariën  -
Beheerder

- Ariën -

26/06/2024 00:43:26
Quote Anchor link
Zie ik het nou verkeerd? maar dat is gewoon toch iets in SQL? Dan kan je die query ook prima met MySQLi uitvoeren.
 
- SanThe -

- SanThe -

26/06/2024 00:56:53
Quote Anchor link
Ja klopt.
Alleen ik weet de query niet.
En kan het niet vinden.

SanThe.
 
- Ariën  -
Beheerder

- Ariën -

26/06/2024 01:03:26
Quote Anchor link
Met phpMyAdmin zie je toch welke query er wordt uitgevoerd?
 
- SanThe -

- SanThe -

26/06/2024 01:10:01
Quote Anchor link
Helaas, er wordt alleen DROP TABLE .... weergegeven.
Dus dan weet ik nog niks.

SanThe.
 
Jan Koehoorn

Jan Koehoorn

26/06/2024 04:46:32
Quote Anchor link
Gevonden (niet getest)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE your_tablename;
SET FOREIGN_KEY_CHECKS = 1;
 
- SanThe -

- SanThe -

26/06/2024 08:08:06
Quote Anchor link
Hartelijk dank Jan.

SanThe.
 
Ivo P

Ivo P

26/06/2024 08:59:50
Quote Anchor link
Heerlijk zo'n letterlijke vertaling naar "externe sleutelvelden"

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?
 
Jan Koehoorn

Jan Koehoorn

26/06/2024 11:49:07
Quote Anchor link
Het is zeker uitkijken geblazen, bijvoorbeeld wanneer je ON DELETE CASCADE gebruikt heb bij het opzetten van je FK's.
 
- Ariën  -
Beheerder

- Ariën -

27/06/2024 11:05:34
Quote Anchor link
Eigenlijk ben ik blij dat ik haast geen phpMyAdmin meer gebruik. HeidiSQL werkt prima, en de CLI bovendien ook en lekker supersnel, zonder limieten vanuit PHP.
Gewijzigd op 27/06/2024 11:05:50 door - Ariën -
 
Ad Fundum

Ad Fundum

30/06/2024 21:05:18
Quote Anchor link
Ja "externe sleutelvelden" is fout vertaald. In het Nederlands heet het "vreemde sleutelvelden".

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.
Gewijzigd op 30/06/2024 21:06:37 door Ad Fundum
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.