首页 > 数据库 > mysql教程 > 如何强制InnoDB在加载数据后重新检查外键?

如何强制InnoDB在加载数据后重新检查外键?

Susan Sarandon
发布: 2024-12-05 08:50:09
原创
200 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板