Mysql SQL外键约束引用信息\u架构

Mysql SQL外键约束引用信息\u架构,mysql,sql,foreign-keys,information-schema,Mysql,Sql,Foreign Keys,Information Schema,是否可以“约束”一个表中的列,该表以任何方式“引用”了信息\u schema中视图中的列(它不需要适当的外键约束,因此使用短引号)?--我需要一种最小侵入性的方法来添加关于现有列数据的任意元数据(例如添加“注释”)例如,关于shop.cheeses.nameforshop.cheeses.id=n)的值,因此我考虑定义一个额外的表: CREATE TABLE shop.metadata ( `table_schema` VARCHAR(64) NOT NULL, `table_n

是否可以“约束”一个表中的列,该表以任何方式“引用”了
信息\u schema
中视图中的列(它不需要适当的外键约束,因此使用短引号)?--我需要一种最小侵入性的方法来添加关于现有列数据的任意元数据(例如添加“注释”)例如,关于
shop.cheeses.name
for
shop.cheeses.id=
n)的值,因此我考虑定义一个额外的表:

CREATE TABLE shop.metadata (
    `table_schema` VARCHAR(64) NOT NULL,
    `table_name` VARCHAR(64) NOT NULL,
    `column_name` VARCHAR(64) NOT NULL,
    `record_id` INT(11) UNSIGNED NOT NULL,
    `comments` TEXT NOT NULL, /* just to show the purpose of the table */
    PRIMARY KEY (`table_schema`, `table_name`, `column_name`, `record_id`),
    FOREIGN KEY (`table_schema`, `table_name`, `column_name`) REFERENCES information_schema.TABLES(`TABLE_SCHEMA`, `TABLE_NAME`, `COLUMN_NAME`)
);
但是,此语句返回
错误1215(HY000):无法添加外键约束
,这可能是因为
表\u架构
表\u名称
列\u名称
未定义为
唯一
编辑:即使列是唯一的,似乎也不可能,因为您不能在外键约束中引用视图)

但是,是否没有其他方法来定义

  • shop.metadata.table\u schema
    必须包含
    information\u schema.TABLES.table\u schema
  • shop.metadata.table\u name
    必须包含
    information\u schema.TABLES.table\u name
  • shop.metadata.column\u name
    必须包含
    information\u schema.TABLES.column\u name
  • (表\u架构、表\u名称、列\u名称、记录\u id)
    的任何四个值都是唯一的

感谢您的帮助。

信息模式的
表实际上是视图,因此您无法引用它们。您需要使用正确的唯一约束维护自己的表,并可能使用计划作业填充它,然后引用它。只需使用插入/更新前触发器,您就可以维护自己的约束。