将元数据属性添加到MySQL表

时间:2010-03-18 00:49:35

标签: php mysql reflection metadata

我想将自定义属性添加到MySQL表中,我可以通过php读取它。

这些属性不会干扰表本身 - 它们主要在代码生成期间由php代码访问,并且这些属性必须驻留在DB本身中。

与.NET反射相似的概念。

MySQL支持这样的东西吗?

感谢。

3 个答案:

答案 0 :(得分:5)

当您CREATEALTER表格时,您可以添加COMMENTS - 一个表格作为整体,一个表格列表。要检索这些注释,您可以查询数据库INFORMATION_SCHEMA,特别是列INFORMATION_SCHEMA.COLUMNS.COLUMNS_COMMENTINFORMATION_SCHEMA.TABLE.TABLE_COMMENTSINFORMATION_SCHEMA提供了大量有关数据库的元数据,包括DESCRIBE语句提供的数据。对某个表或列具有读访问权限的任何用户都可以从INFORMATION_SCHEMA读取相应的元数据,但无法读取有关他们没有读取权限的表的元数据。

将自定义元数据存储在INFORMATION_SCHEMA中看起来很自然,但它并不像您需要的那样灵活,因为每列只能存储一个COMMENT。如果这是为了您的目的是限制性的,或者您需要定期更新数据,您应该关注@Dark Falcon并创建一个额外的表格。

答案 1 :(得分:1)

什么样的属性?既然你提到反思,我假设你正试图找到关于表结构的东西?您是否意识到告诉您表结构的命令是SQL并将结果作为任何其他查询返回?这使您可以以编程方式处理结果,例如,DESCRIBE TABLE。这是你在找什么?

答案 2 :(得分:0)

titanoboa's answer开始,以下是在PHP中设置表的 COMMENT 值的方法:

$my_comment = "Test comment.";
$mysqli->query("ALTER TABLE `my_table_name` COMMENT = '$my_comment'");

这是读回它的方法:

$res = $mysqli->query("SELECT `TABLE_COMMENT` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = 'my_db_name' AND `TABLE_NAME` = 'my_table_name' LIMIT 1");
$row = $res->fetch_assoc();
$my_comment = $row['TABLE_COMMENT']; // "Test comment."