相关疑难解决方法(0)

如何查找具有引用特定table.column的外键并具有这些外键值的所有表?

我有一个表,其主键在其他几个表中作为外键引用.例如:

  CREATE TABLE `X` (
    `X_id` int NOT NULL auto_increment,
    `name` varchar(255) NOT NULL,
    PRIMARY KEY  (`X_id`)
  )
  CREATE TABLE `Y` (
    `Y_id` int(11) NOT NULL auto_increment,
    `name` varchar(255) NOT NULL,
    `X_id` int DEFAULT NULL,
    PRIMARY KEY  (`Y_id`),
    CONSTRAINT `Y_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
  )
  CREATE TABLE `Z` (
    `Z_id` int(11) NOT NULL auto_increment,
    `name` varchar(255) NOT NULL,
    `X_id` int DEFAULT NULL,
    PRIMARY KEY  (`Z_id`),
    CONSTRAINT `Z_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
  )
Run Code Online (Sandbox Code Playgroud)

现在,我不知道数据库中有多少表包含X中的外键,如表Y和Z.是否有可用于返回的SQL查询:

  1. 包含外键到X的表的列表
  2. 和哪些表实际上在外键中有值

mysql foreign-keys

261
推荐指数
5
解决办法
16万
查看次数

强制InnoDB重新检查表/表上的外键?

我有一组InnoDB表,我经常需要通过删除一些行并插入其他行来维护.其中一些表具有引用其他表的外键约束,因此这意味着表加载顺序很重要.要插入新行而不必担心表的顺序,我使用:

SET FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)

之前,然后:

SET FOREIGN_KEY_CHECKS=1;
Run Code Online (Sandbox Code Playgroud)

后.

加载完成后,我想检查更新表中的数据是否仍然保持参照完整性 - 新行不会破坏外键约束 - 但似乎没有办法做到这一点.

作为测试,我输入的数据确实违反了外键约束,并且在重新启用外键检查时,mysql没有产生任何警告或错误.

如果我试图找到一种方法来指定表加载顺序,并在加载过程中留在了外键检查,这不会让我在具有自引用外键约束的表加载数据,因此这将不是一个可接受的解决方案

有没有办法强制InnoDB验证表或数据库的外键约束?

mysql innodb foreign-keys

60
推荐指数
3
解决办法
2万
查看次数

标签 统计

foreign-keys ×2

mysql ×2

innodb ×1