首頁  >  文章  >  資料庫  >  批次資料修改後如何驗證InnoDB表中的參考完整性?

批次資料修改後如何驗證InnoDB表中的參考完整性?

Patricia Arquette
Patricia Arquette原創
2024-11-20 16:15:18687瀏覽

How to Verify Referential Integrity in InnoDB Tables After Bulk Data Modifications?

在 InnoDB 表中強制引用完整性

InnoDB 表中的外鍵約束透過防止刪除引用記錄來確保資料完整性。然而,在批量資料修改之後,可能需要驗證外鍵約束是否仍然完好。

InnoDB 沒有提供內建方法來強制其重新檢查外鍵。但是,可以建立自訂 SQL 預存程序來執行此任務。

自訂 SQL 預存程序

下列預存程序 ANALYZE_INVALID_FOREIGN_KEYS可用於分析所有資料庫中的表格並識別任何無效的外部鍵:

DELIMITER $$

DROP PROCEDURE IF EXISTS ANALYZE_INVALID_FOREIGN_KEYS$$

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
        -- ... (stored procedure code) ...
    END$$
DELIMITER ;

用法

要使用儲存過程,請執行以下查詢:

CALL ANALYZE_INVALID_FOREIGN_KEYS('%', '%', 'Y');

這將分析中的所有表格目前資料庫並將任何無效的外鍵違規儲存在名為的臨時表中INVALID_FOREIGN_KEYS。

解釋結果

INVALID_FOREIGN_KEYS 表將包含每個無效外鍵的以下資訊:

  • TABLE_SCHEMA:資料庫名稱違規者的tabled .
  • TABLE_NAME:違規表的名稱。
  • COLUMN_NAME:違規欄位的名稱。
  • CONSTRAINT_NAME:外鍵約束的名稱。
  • REFERENCED_TABLE_SCHEMA:引用的資料庫名稱table。
  • REFERENCED_TABLE_NAME:引用的表格的名稱。
  • REFERENCED_COLUMN_NAME:引用的欄位的名稱。
  • INVALID_KEY_COUNT:無效外鍵所引用的數量。
  • INVALID_KEY_SQL:可以使用的SQL查詢來擷取無效行。

限制

請注意,此過程有以下限制:

  • 它不檢查用於自引用外鍵約束。
  • 它需要引用列和被引用列上的索引以獲得最佳效果效能。
  • 大型資料庫可能需要大量時間才能運作。

以上是批次資料修改後如何驗證InnoDB表中的參考完整性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn