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
forshop.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)
感谢您的帮助。信息模式的
表实际上是视图,因此您无法引用它们。您需要使用正确的唯一约束维护自己的表,并可能使用计划作业填充它,然后引用它。只需使用插入/更新前触发器,您就可以维护自己的约束。