查询以查找外键

And*_*ira 8 mysql foreign-keys

我有一个数据库,我需要删除一些外键,但我事先不知道外键是否仍然存在.

我找到了一些存储过程(http://forums.mysql.com/read.php?97,218825,247526),但我不想为此创建存储过程.

我试图在存储过程中使用查询,但是我使用"IF EXISTS(SELECT NULL FROM等等)得到错误...

我只能IF EXISTS在存储过程中使用吗?


现在,我唯一可以运行的是

SELECT * FROM information_schema.TABLE_CONSTRAINTS 
WHERE information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY' 
AND information_schema.TABLE_CONSTRAINTS.TABLE_SCHEMA = 'myschema'
AND information_schema.TABLE_CONSTRAINTS.TABLE_NAME = 'mytable';
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个

IF EXISTS (SELECT NULL FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = DATABASE() AND CONSTRAINT_NAME = parm_key_name) THEN
(...) do something (...)
END IF; 
Run Code Online (Sandbox Code Playgroud)

但我得到了 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF' at line 1

我在简单查询的论坛中查找了示例,我无法理解为什么这不起作用.

注意:编辑以更正损坏的链接

Kar*_*hik 7

您需要连接到信息方案,您可以在此表中找到有关主键和外键的所有信息

SELECT * FROM information_schema.TABLE_CONSTRAINTS T;

您需要成为ROOT用户才能访问information_schema.

使用此表,您可以找到表,db以及它是否具有外键.

如果您不想使用IF EXIST和存储过程,希望这会有所帮助.但我肯定你可以使用IF EXIST可以用于非存储过程查询....


小智 5

你为什么不使用表“INFORMATION_SCHEMA”呢?

SELECT *
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
Run Code Online (Sandbox Code Playgroud)