mysql - 使用特定外键选项查询所有约束

标签 mysql sql database

我在 MySql 中有几个带有外键的表。例如:

CREATE TABLE rooms (
  room_no int(11) NOT NULL AUTO_INCREMENT,
  room_name varchar(255) NOT NULL,
  building_no int(11) NOT NULL,
  PRIMARY KEY (room_no),
  KEY building_no (building_no),
CONSTRAINT rooms_ibfk_1 
  FOREIGN KEY (building_no) 
  REFERENCES buildings (building_no) 
  ON DELETE CASCADE
) ENGINE=InnoDB;

我想查询模式中具有外键约束的每个表并了解其他选项。 我尝试过以下查询:

select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE;

select *
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where CONSTRAINT_TYPE = 'FOREIGN KEY';

不幸的是,他们没有给我删除或更新操作。

最佳答案

如果您的表是 INNODB(我假设它们已被赋予外键),请查看 INFORMATION_SCHEMA.SYS_FOREIGN 。从文档中,type 字段为您提供 ON DELETE/ON UPDATE 操作:

A collection of bit flags with information about the foreign key column, ORed together. 1 = ON DELETE CASCADE, 2 = ON UPDATE SET NULL, 4 = ON UPDATE CASCADE, 8 = ON UPDATE SET NULL, 16 = ON DELETE NO ACTION, 32 = ON UPDATE NO ACTION.

您可以通过FOR_NAMEREF_NAME进行查询。

关于mysql - 使用特定外键选项查询所有约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29420804/

相关文章:

sql - No_data_found 异常也传播到外部 block 吗?

database - 在外键约束列上创建非唯一索引

MySQL:扩展 DATE 表

c++ - 从 MySQL 选择 LONGTEXT 列时 CRecordset 出现 "out of memory"异常

mysql - 将函数输出转换为列名称

Mysql:创建表时将DATETIME的格式设置为 'DD-MM-YYYY HH:MM:SS'

PHP 用 LIKE 准备语句

MySQL的character_set_server不会生效

sql - 根据 Snowflake 中最大的一列的值选择一条记录

sql - 如何在select语句中检查列值是否为空