首页 > 解决方案 > mysqlcheck 是否检查外键约束

问题描述

我正在阅读mysqlcheck 这里的文档,但我无法理解它是做什么的--check,我的意思是,我无法理解它检查了什么错误(我只能找到Check the tables for errors. This is the default operation.)。

(我的目标是检查外键约束,因为我使用 插入了一堆记录SET FOREIGN_KEY_CHECKS = 0;

标签: mysqlforeign-keys

解决方案


我做了这个测试:

DROP TABLE test2;
DROP TABLE test1;

CREATE TABLE test1(id INT primary key)  ENGINE INNODB;
CREATE TABLE test2(
    id INT PRIMARY KEY,
    CONSTRAINT fk_test1 FOREIGN KEY (id) REFERENCES test1 (id)
) ENGINE INNODB;

INSERT INTO test1 VALUES (1);

SET FOREIGN_KEY_CHECKS = 0;
SELECT @@FOREIGN_KEY_CHECKS;

INSERT INTO test2 VALUES (1);
INSERT INTO test2 VALUES (2);
INSERT INTO test2 VALUES (3);

SET FOREIGN_KEY_CHECKS = 1;
SELECT @@FOREIGN_KEY_CHECKS;

-- INSERT INTO test2 VALUES (4);

SELECT * FROM test1;
SELECT * FROM test2;

输出:

0
1
id
1
id
1
2
3

然后我跑了mysqlcheck

>mysqlcheck -c -u root testdb test2
testdb.test2                                     OK

所以我认为这Check the tables for errors.意味着数据存储(低级)错误,而不是数据一致性

按预期运行CHECK TABLE test2会产生相同的结果。

打开此检查后,我找不到检查外键的简单方法。似乎唯一要做的就是information_schema为所有 FK 约束编写选择。


推荐阅读