如何在 InnoDB 表中强制执行外键检查
问题
您正在管理一组定期更新(涉及行删除)的 InnoDB 表和插入。这些表具有外键约束,因此表加载的顺序至关重要。为了避免外键约束问题,您需要禁用并重新启用外键检查(SET FOREIGN_KEY_CHECKS=0 和 SET FOREIGN_KEY_CHECKS=1)。但是,您发现在禁用检查的情况下加载数据不会在重新启用检查时触发任何警告或错误,尽管故意违反了外键规则。
解决方案
InnoDB 不提供强制外键检查的直接方法,但有解决方法。
使用存储过程
一种方法是创建一个存储过程(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 -- ... (procedure implementation) END$$ DELIMITER ;
要使用该过程,请提供三个参数:
- 要检查的数据库名称模式(checked_database_name)(例如,% 表示所有数据库)
- 要检查的表名称模式(checked_table_name)(例如,% 表示所有表)
- 结果是否表应该是临时的 (temporary_result_table)(Y 表示临时,N 表示永久)
该过程将结果加载到名为 INVALID_FOREIGN_KEYS 的临时表或永久表中。该表包含有关无效外键的信息,包括表架构、表名称、列名称、约束名称、引用的表架构、引用的表名称、引用的列名称、无效键的计数以及用于检索无效行的 SQL 查询。
使用示例
检查所有数据库中是否存在无效外键:
CALL ANALYZE_INVALID_FOREIGN_KEYS('%', '%', 'Y');
查看结果:
SELECT * FROM INVALID_FOREIGN_KEYS;
检索对于特定外键的无效行,请从 INVALID_FOREIGN_KEYS 表执行相应的 INVALID_KEY_SQL 查询。
注意
此方法需要在引用列和被引用列上建立索引以获得最佳性能。
以上是当'SET FOREIGN_KEY_CHECKS=1”无法触发警告或错误时,如何在 InnoDB 表中强制进行外键检查?的详细内容。更多信息请关注PHP中文网其他相关文章!

mysqlviewshavelimitations:1)他们不使用Supportallsqloperations,限制DatamanipulationThroughViewSwithJoinSorsubqueries.2)他们canimpactperformance,尤其是withcomplexcomplexclexeriesorlargedatasets.3)

porthusermanagementInmysqliscialforenhancingsEcurityAndsingsmenting效率databaseoperation.1)usecReateusertoAddusers,指定connectionsourcewith@'localhost'or@'%'。

mysqldoes notimposeahardlimitontriggers,butacticalfactorsdeterminetheireffactective:1)serverConfiguration impactactStriggerGermanagement; 2)复杂的TriggerSincreaseSySystemsystem load; 3)largertablesslowtriggerperfermance; 4)highConconcConcrencerCancancancancanceTigrignecentign; 5); 5)

Yes,it'ssafetostoreBLOBdatainMySQL,butconsiderthesefactors:1)StorageSpace:BLOBscanconsumesignificantspace,potentiallyincreasingcostsandslowingperformance.2)Performance:LargerrowsizesduetoBLOBsmayslowdownqueries.3)BackupandRecovery:Theseprocessescanbe

通过PHP网页界面添加MySQL用户可以使用MySQLi扩展。步骤如下:1.连接MySQL数据库,使用MySQLi扩展。2.创建用户,使用CREATEUSER语句,并使用PASSWORD()函数加密密码。3.防止SQL注入,使用mysqli_real_escape_string()函数处理用户输入。4.为新用户分配权限,使用GRANT语句。

mysql'sblobissuitableForStoringBinaryDataWithInareLationalDatabase,而alenosqloptionslikemongodb,redis和calablesolutionsoluntionsoluntionsoluntionsolundortionsolunsolunsstructureddata.blobobobsimplobissimplobisslowderperformandperformanceperformancewithlararengelitiate;

toaddauserinmysql,使用:createUser'username'@'host'Indessify'password'; there'showtodoitsecurely:1)choosethehostcarecarefullytocon trolaccess.2)setResourcelimitswithoptionslikemax_queries_per_hour.3)usestrong,iniquepasswords.4)Enforcessl/tlsconnectionswith

toAvoidCommonMistakeswithStringDatatatPesInMysQl,CloseStringTypenuances,chosethirtightType,andManageEngencodingAndCollationsEttingsefectery.1)usecharforfixed lengengters lengengtings,varchar forbariaible lengength,varchariable length,andtext/blobforlabforlargerdata.2 seterters seterters seterters seterters


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具