Ich habe ein wirklich seltsames (und beängstigendes) Problem: Meine mySQL DB ignoriert im Allgemeinen Fremdschlüsseleinschränkungen!MySQL DB ignoriert Fremdschlüsseleinschränkungen
Alle meine Tabellen sind InnoDB
und ich sie mit Liquibase wie folgt zu schaffen:
<addForeignKeyConstraint baseColumnNames="user_account_id"
baseTableName="account_transaction"
constraintName="fk_account_transaction_user_account_id"
referencedColumnNames="id"
referencedTableName="user_account"/>
Die Fremdschlüssel werden erstellt, in Ordnung. In HeidiSQL Ich sehe sie wie folgt aus:
ich auch für FOREIGN_KEY_CHECKS
geprüft und ich habe es auf 1 (SET FOREIGN_KEY_CHECKS=1;
)
Alle meine ID-Spalten haben den Datentyp BIGINT
(weiß nicht, ob diese Fragen).
Was auch wert zu erwähnen: Die folgende Anweisung
SELECT * FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = DATABASE();
gibt eine Reihe von Einschränkungen, aber keine Fremdschlüssel-Constraints ... Wenn ich die gleiche Aussage auf meiner lokalen mySQL DB ausführen, es gibt all die Einschränkungen einschließlich Fremdschlüsseleinschränkungen. Ich kann nicht herausfinden, was ist der Unterschied zwischen ihnen, obwohl ...
Jede Hilfe wird sehr geschätzt :)
@Update: So der Hinweis mit MyISAM und InnoDB hat den Trick. Ich habe das schon mal untersucht. Aus irgendeinem Grund sind meine Tabellen jedoch InnoDB, aber meine DB ist MyISAM. Ich werde machen weitere Untersuchungen an, dass :)
Sind die Tabellen den Motor MyISAM-Speicher verwenden? Sie müssen InnoDB verwenden. Fremdschlüsseleinschränkungen werden in anderen Speicher-Engines ignoriert.'SELECT TABLE_NAME, ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATENBANK();' –
Leider sind sie alle InnoDB, wie ich oben erwähnt – dave0688
Wenn die FOREIGN KEY Einschränkungen nicht in information_schema.table_constraints angezeigt werden, sind sie nicht definiert. Führen Sie eine 'SHOW CREATE TABLE account_transaction' durch, um zu bestätigen. (Die wahrscheinlichste Erklärung ist, dass die Speicher-Engine nicht InnoDB ist - überprüfen Sie, wie Bill Karwin vorgeschlagen hat, die ENGINE-Spalte von information_schema.tables. Ich denke, HeidiSQL zeigt die Indizes, nicht die Einschränkungen. Klingt, als ob Liquibase mehr im Weg ist als es hilft.) – spencer7593