Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MySQL: Foreign Key Constraints ermitteln (https://www.delphipraxis.net/125163-mysql-foreign-key-constraints-ermitteln.html)

alcaeus 1. Dez 2008 20:18

Datenbank: MySQL • Version: 5.0 • Zugriff über: PHP-Funktionen

MySQL: Foreign Key Constraints ermitteln
 
Hallo ihr,

ich wollte in einer Web-Applikation Foreign Key Constraints in der MySQL-Datenbank nutzen. Funktioniert an sich wunderbar, jedoch besteht noch ein kleines Problem. Die Web-Applikation stellt automatisch alle Aenderungen am Code und an der Datenbank in ein Update-Script, welches sich dann schnell auf einzelne Installationen verteilen laesst. Die Indizes selbst kann ich ja ohne weiteres mit
SQL-Code:
SHOW INDEX FROM <tablename>
rausfischen. Allerdings werden Foreign Keys da nicht mit angezeigt.

Eine Suche im Netz hat mich auch nicht wirklich weitergebracht, anscheinend scheint der einzige Weg zu sein, in der information_schema-Datenbank von MySQL selbst rumzusuchen und sich die Constraints selbst rauszusuchen. Da das wohl kaum ne Loesung ist (schliesslich hat nicht jeder User Zugriff auf diese Datenbank), wuerde ich mich gerne nach einer anderen Loesung umsehn.

Kennt jemand ne Moeglichkeit, Foreign Keys fuer eine Tabelle rauszuholen? SHOW CREATE TABLE ist uebrigens auch keine Option, da ich evtl. auch ein Update-Query bauen muss, und ich nicht wirklich Lust hab, das CREATE-Statement auseinanderzuparsen ;)

Greetz
alcaeus

omata 1. Dez 2008 21:22

Re: MySQL: Foreign Key Constraints ermitteln
 
SQL-Code:
SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';

alcaeus 1. Dez 2008 21:38

Re: MySQL: Foreign Key Constraints ermitteln
 
Moin omata,

soweit war ich auch schon - aber guck dir den Output selbst an:
Code:
Array
(
    [Name] => product_order
    [Engine] => InnoDB
    [Version] => 10
    [Row_format] => Compact
    [Rows] => 0
    [Avg_row_length] => 0
    [Data_length] => 16384
    [Max_data_length] => 0
    [Index_length] => 32768
    [Data_free] => 0
    [Auto_increment] => 1
    [Create_time] => 2008-11-30 17:05:48
    [Update_time] =>
    [Check_time] =>
    [Collation] => utf8_general_ci
    [Checksum] =>
    [Create_options] =>
    [Comment] => InnoDB free: 67584 kB; (`product_category` `product_id`) REFER `test/product`(`c
)
Dass ich das Comment-Feld durchparsen muss, ist eine Sache; dass es dabei auch noch abgeschnitten ist, bringt mich aber auch nicht weiter.

Greetz
alcaeus

mirage228 1. Dez 2008 21:59

Re: MySQL: Foreign Key Constraints ermitteln
 
Also bei mir ist da nix abgeschnitten im Comment-Feld ... MySQL 4 mit PHP 5.2 auf Windows XP IIS5 ...

Code:
Array
(
    [Name] => assoc
    [Engine] => InnoDB
    [Version] => 9
    [Row_format] => Fixed
    [Rows] => 5
    [Avg_row_length] => 3276
    [Data_length] => 16384
    [Max_data_length] =>
    [Index_length] => 32768
    [Data_free] => 0
    [Auto_increment] =>
    [Create_time] => 2008-01-02 12:07:34
    [Update_time] =>
    [Check_time] =>
    [Collation] => latin1_swedish_ci
    [Checksum] =>
    [Create_options] =>
    [Comment] => InnoDB free: 10240 kB; (`pid`) REFER `db/project`(`id`) ON DELETE CASCADE; (`eid`) REFER `db/employees`(`id`) ON DELETE CASCADE
)
Viele andere Möglichkeiten bleiben dir laut MySQL Manual auch leider nicht ...

P.S.: Also das Comment Feld müsste sich ja astrein parsen lassen. Einfach bei den Semikola (Schreibweise?) String trennen und die einzelnen Teile mit RegEx zerplücken. Ggf. findet sich dazu ja scho fertiger Code im Netz...

Viele Grüße

alcaeus 2. Dez 2008 06:13

Re: MySQL: Foreign Key Constraints ermitteln
 
Zitat:

Zitat von mirage228
Also bei mir ist da nix abgeschnitten im Comment-Feld ... MySQL 4 mit PHP 5.2 auf Windows XP IIS5 ...

Strange, bei mir ist es tatsaechlich abgeschnitten, hab grad nochmal geguckt.

Zitat:

Zitat von mirage228
P.S.: Also das Comment Feld müsste sich ja astrein parsen lassen. Einfach bei den Semikola (Schreibweise?) String trennen und die einzelnen Teile mit RegEx zerplücken. Ggf. findet sich dazu ja scho fertiger Code im Netz...

Das schon - ich erhalte Definitionen aber normalerweise schon zerteilt, ist immer einfacher als erstmal parsen ;)

Ich guck mir das nochmal an, wenn das Comment-Feld nicht abgeschnitten waer, koennt ich damit ja was anfangen, so ists aber ein Problem

Greetz
alcaeus

JasonDX 2. Dez 2008 07:45

Re: MySQL: Foreign Key Constraints ermitteln
 
Zudem ist die Länge des Comment-Feldes (Bei mir sinds 80 Zeichen) beschränkt; Bei mehreren Foreign-Keys gibt das dann Probleme.
Die einzige (saubere und sichere) Variante scheint echt das information_schema zu sein.

greetz
Mike


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz