Query to find foreign keys

2019-02-13 17:30发布

I have a database where I need to drop some foreign keys, but I don't know beforehand whether the foreign keys still exist.

I've found some stored procedures (http://forums.mysql.com/read.php?97,218825,247526) that does the trick, but I don't want to create a stored procedure for this.

I've tried to use the query inside the stored procedure, but I get an error using "IF EXISTS (SELECT NULL FROM etc.. etc...

Can I only use IF EXISTS in stored procedures?


right now, the only thing I can run is

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';

and I've tried this too

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

but I get a 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

I've looked for examples in forums with simple queries and I can't make sense of why this isn't working.

NOTE: Edit to correct broken link

3条回答
\"骚年 ilove
2楼-- · 2019-02-13 17:44

Why don't You use the table "INFORMATION_SCHEMA" to this?

SELECT *
FROM `TABLE_CONSTRAINTS`
WHERE `CONSTRAINT_TYPE` = 'FOREIGN KEY'
查看更多
Animai°情兽
3楼-- · 2019-02-13 17:54

You need to connect to the Information scheme and you can find all the information about the primary key and foreign keys in this table

 select
        concat(table_name, '.', column_name) as 'foreign key',  
        concat(referenced_table_name, '.', referenced_column_name) as 'references'
    from
        information_schema.key_column_usage
    where
        referenced_table_name is not null;

HELP: see this link list-foreign-keys-in-mysql

查看更多
该账号已被封号
4楼-- · 2019-02-13 17:57

You need to connect to the Information scheme and you can find all the information about the primary key and foreign keys in this table

SELECT * FROM information_schema.TABLE_CONSTRAINTS T;

you need to be a ROOT user to access the information_schema.

USING this table you can find the table, db and whether it has foreign key.

Hope this helps if you dont wanna use IF EXIST and Stored Procedure. But I am Sure you can use IF EXIST can be used for non stored procedure queries....

查看更多
登录 后发表回答