Heim >Datenbank >MySQL-Tutorial >Wie kann ich InnoDB dazu zwingen, Fremdschlüssel nach dem Laden von Daten erneut zu überprüfen?

Wie kann ich InnoDB dazu zwingen, Fremdschlüssel nach dem Laden von Daten erneut zu überprüfen?

Susan Sarandon
Susan SarandonOriginal
2024-12-05 08:50:09204Durchsuche

How to Force InnoDB to Recheck Foreign Keys After Loading Data?

Wie zwinge ich InnoDB, Fremdschlüssel für eine Tabelle/Tabellen erneut zu überprüfen?

Beim Laden von Daten in Tabellen mit Fremdschlüsseleinschränkungen ist die Sicherstellung der referenziellen Integrität von entscheidender Bedeutung. Wenn Sie FOREIGN_KEY_CHECKS während des Ladevorgangs jedoch auf 0 setzen, kann es nach der erneuten Aktivierung zu Dateninkonsistenzen kommen.

Um dieses Problem zu beheben, sollten Sie die Verwendung der bereitgestellten gespeicherten Prozedur in Betracht ziehen: ANALYZE_INVALID_FOREIGN_KEYS.

DELIMITER $$

CREATE
    PROCEDURE `ANALYZE_INVALID_FOREIGN_KEYS`(
        checked_database_name VARCHAR(64), 
        checked_table_name VARCHAR(64), 
        temporary_result_table ENUM('Y', 'N'))

    LANGUAGE SQL
    NOT DETERMINISTIC
    READS SQL DATA

    BEGIN
        DECLARE VARIABLES...

        OPEN foreign_key_cursor;
        foreign_key_cursor_loop: LOOP
            FETCH foreign_key_cursor INTO 
            TABLE_SCHEMA_VAR, 
            ...

            SET @from_part = CONCAT(...);
            SET @full_query = CONCAT(...);
            PREPARE stmt FROM @full_query;

            EXECUTE stmt;
            IF @invalid_key_count > 0 THEN
                INSERT INTO 
                    INVALID_FOREIGN_KEYS 
                SET 
                    `TABLE_SCHEMA` = TABLE_SCHEMA_VAR, 
                    ...

            END IF;
            DEALLOCATE PREPARE stmt; 

        END LOOP foreign_key_cursor_loop;
    END$$

DELIMITER ;

Diese Prozedur analysiert alle Fremdschlüssel und identifiziert alle Zeilen, die diese verletzen. Die Ergebnisse werden in der Tabelle INVALID_FOREIGN_KEYS gespeichert.

Um dieses Verfahren zu verwenden:

  • Führen Sie CALL ANALYZE_INVALID_FOREIGN_KEYS('%', '%', 'Y'); um die gesamte Datenbank zu analysieren.
  • Ersetzen Sie „%“ durch bestimmte Datenbank- und Tabellenmuster, um den Umfang einzugrenzen.
  • Geben Sie „N“ für temporary_result_table an, um die Ergebnisse in einer permanenten Tabelle zu speichern.

Beachten Sie, dass dieses Verfahren für eine optimale Leistung Indizes sowohl für verweisende als auch für referenzierte Spalten erfordert.

Das obige ist der detaillierte Inhalt vonWie kann ich InnoDB dazu zwingen, Fremdschlüssel nach dem Laden von Daten erneut zu überprüfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:.py-ErweiterungskonventionNächster Artikel:.py-Erweiterungskonvention