Query to find foreign keys

≯℡__Kan透↙ 提交于 2019-12-19 00:22:29

问题


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


回答1:


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....




回答2:


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

SELECT *
FROM `TABLE_CONSTRAINTS`
WHERE `CONSTRAINT_TYPE` = 'FOREIGN KEY'



回答3:


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



来源:https://stackoverflow.com/questions/7765820/query-to-find-foreign-keys

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!