首頁 > 資料庫 > mysql教程 > 如何強制InnoDB在載入資料後重新檢查外鍵?

如何強制InnoDB在載入資料後重新檢查外鍵?

Susan Sarandon
發布: 2024-12-05 08:50:09
原創
199 人瀏覽過

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

如何強制 InnoDB 重新檢查表上的外鍵?

將資料載入到具有外鍵約束的表中時,確保引用完整性至關重要。但是,在載入期間將 FOREIGN_KEY_CHECKS 設為 0 可能會導致重新啟用後資料不一致。

要解決此問題,請考慮使用提供的預存程序: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 ;
登入後複製

此過程分析所有外鍵並識別任何違反它們的行。結果儲存在 INVALID_FOREIGN_KEYS 表中。

要使用此程序:

  • 執行 CALL ANALYZE_INVALID_FOREIGN_KEYS('%', '%', 'Y');分析整個資料庫。
  • 將 '%' 替換為特定的資料庫和表格模式以縮小範圍。
  • 為temporary_result_table指定'N'以將結果儲存在永久表中。

請注意,此程序需要在引用列和被引用列上建立索引以獲得最佳效能。

以上是如何強制InnoDB在載入資料後重新檢查外鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板