我想将自定义属性添加到MySQL表中,我可以通过php读取它。
这些属性不会干扰表本身 - 它们主要在代码生成期间由php代码访问,并且这些属性必须驻留在DB本身中。
与.NET反射相似的概念。
MySQL支持这样的东西吗?
感谢。
答案 0 :(得分:5)
当您CREATE
或ALTER
表格时,您可以添加COMMENTS
- 一个表格作为整体,一个表格列表。要检索这些注释,您可以查询数据库INFORMATION_SCHEMA
,特别是列INFORMATION_SCHEMA.COLUMNS.COLUMNS_COMMENT
和INFORMATION_SCHEMA.TABLE.TABLE_COMMENTS
。 INFORMATION_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."