是否可以将表(或表引用)存储在另一个表中,可能是BLOB类型?
我有四张桌子:subject,pupil,pupil_age&员工。我想创建一个列出表的主表,以及一些其他详细信息,例如表名(table_desc)供用户查看。
例如:
table_id--|--table_name--|--table_desc
----------|--------------|------------
-------0--|--subject-----|--Subjects--
-------1--|--pupil-------|--Pupils----
-------2--|--pupil_age---|--Pupil age-
-------3--|--staff-------|--Staff-----
我不希望将table_name存储为文本,而是将其作为允许我对其执行操作的数据类型。
我有一个javascipt菜单,允许用户过滤,例如对于pupil_age = 11或staff_id = 10078。
当您将鼠标悬停在“添加过滤器”上时,菜单显示如下:
Add filter > Pupils
-----------> Staff
-----------> Subject
将鼠标悬停在Pupils上会显示另外两个选项,然后当您将鼠标悬停在Pupil年龄时,这些值会显示:
Add filter > Pupils > Pupil name
--------------------> Pupil age > 11
--------------------------------> 12
--------------------------------> 13
-----------> Staff
-----------> Subject
在此示例中,pupil是包含名称的表,而pupil_age是包含值11,12,13的表。
我想从表格本身驱动这个菜单,服务器端。我正在使用MySQL,但我的问题是这是否可以在任何数据库中使用。
我最近的想法是一个表是否可以包含被识别为表的表名等对象,而不是存储为文本。
任何帮助都非常感激
艾玛
答案 0 :(得分:2)
不,MySQL中没有用于存储" table_name"," column_name"等的特殊数据类型。
要回答您似乎要问的问题,在单个查询中是否可以从列返回值,然后在SQL查询中将这些值用作标识符(table_name,column_name)。 ..答案是否定的。不在一个声明中。
要回答标题中的问题,是的,可以将table_name存储在列中。 (注意
MySQL在名为 information_schema
的数据库中提供架构信息。如果您需要在自己的模式中存储架构信息,那么 information_schema.tables
和 information_schema.columns
表中列的数据类型将是数据类型的合适选择表。
如果您了解DBMS如何执行SQL语句,即处理SQL文本的实际步骤顺序...即语法检查(识别关键字,识别标识符,以适当的顺序等),语义检查(标识符指有效数据库对象,执行语句的用户具有适当的权限),准备执行计划(可用索引,可能的连接排列),然后执行准备好的计划......
然后,很明显为什么从语句执行返回的列值(或作为绑定参数提供的值)不能在语句中称为标识符。