【问题标题】:Query to find foreign keys查询以查找外键
【发布时间】:2011-12-07 15:01:30
【问题描述】:

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

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

我尝试在存储过程中使用查询,但使用“IF EXISTS (SELECT NULL FROM etc.. etc...

我只能在存储过程中使用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';

我也试过了

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

但我得到了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

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

注意:编辑以更正断开的链接

【问题讨论】:

  • 那么您的查询是什么样的?
  • “删除外键”具体是什么意思?
  • @gview 类似于 ALTER TABLE table DROP FOREIGN KEY fk ;

标签: mysql foreign-keys


【解决方案1】:

你需要连接到Information scheme,你可以在这个表中找到所有关于主键和外键的信息

SELECT * FROM information_schema.TABLE_CONSTRAINTS T;

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

使用这个表可以查到表、db以及是否有外键。

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

【讨论】:

  • "[Y]您需要成为 ROOT 用户才能访问 information_schema。"您在哪里找到这些信息?
  • 我认为更准确的说法是用户只能查看他们有权访问的部分信息架构。如果用户是使用GRANT ALL 创建的,那么他们可以看到该表的权限。
【解决方案2】:

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

SELECT *
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'

【讨论】:

    【解决方案3】:

    你需要连接到Information scheme,你可以在这个表中找到所有关于主键和外键的信息

     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;
    

    帮助:查看此链接list-foreign-keys-in-mysql

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 1970-01-01
      • 2021-04-06
      相关资源
      最近更新 更多