Rumah >pangkalan data >tutorial mysql >Bagaimana Memaksa InnoDB untuk Semak Semula Kekunci Asing Selepas Memuatkan Data?

Bagaimana Memaksa InnoDB untuk Semak Semula Kekunci Asing Selepas Memuatkan Data?

Susan Sarandon
Susan Sarandonasal
2024-12-05 08:50:09222semak imbas

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

Bagaimanakah Memaksa InnoDB untuk menyemak Semula Kekunci Asing pada Jadual/Jadual?

Apabila memuatkan data ke dalam jadual dengan kekangan kunci asing, memastikan integriti rujukan adalah penting. Walau bagaimanapun, menetapkan FOREIGN_KEY_CHECKS kepada 0 semasa pemuatan boleh mengakibatkan ketidakkonsistenan data selepas mendayakannya semula.

Untuk mengatasinya, pertimbangkan untuk menggunakan prosedur tersimpan yang disediakan: 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 ;

Prosedur ini menganalisis semua kunci asing dan mengenal pasti mana-mana baris yang melanggarnya. Hasilnya disimpan dalam jadual INVALID_FOREIGN_KEYS.

Untuk menggunakan prosedur ini:

  • Laksanakan CALL ANALYZE_INVALID_FOREIGN_KEYS('%', '%', 'Y'); untuk menganalisis keseluruhan pangkalan data.
  • Ganti '%' dengan pangkalan data dan corak jadual tertentu untuk mengecilkan skop.
  • Nyatakan 'N' untuk temporary_result_table untuk menyimpan keputusan dalam jadual kekal.

Perhatikan bahawa prosedur ini memerlukan indeks pada kedua-dua lajur rujukan dan rujukan untuk prestasi optimum.

Atas ialah kandungan terperinci Bagaimana Memaksa InnoDB untuk Semak Semula Kekunci Asing Selepas Memuatkan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Konvensyen sambungan .pyArtikel seterusnya:Konvensyen sambungan .py