mysql - DESCRIBE命令的内部定义是什么以及如何扩展?

标签 mysql

简而言之,在 mysql 命令行界面中,输入 desc TABLE_Julia 相当于 select COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, EXTRA from information_schema.COLUMNS where TABLE_SCHEMA = database( ) 和 TABLE_NAME,如“TABLE_Julia”

我想知道从 desc 到服务器程序中等效的 select 语句的转换发生在哪里,因为我想实现命令info TABLE_Julia,其行为类似于从 information_schema.COLUMNS 中选择 COLUMN_NAME、COLUMN_TYPE、IS_NULLABLE、COLUMN_KEY、COLUMN_DEFAULT、EXTRA、COLUMN_COMMENT,其中 TABLE_SCHEMA = database() 和 TABLE_NAME 如 'TABLE_Julia',添加COLUMN_COMMENT,这对应用开发者来说非常方便。

实际上,我已经更改了lex.hmysqld.ccsql_cmd.hsql_parse.cc, sql_yacc.yy,结果是 info TABLE_Julia 的输出与现在的 desc TABLE_Julia 完全相同,但事实并非如此够了。

我搜索了LEXdo_selectJOIN::execmysql_execute_selectmysql_selecthandle_selectexecute_sqlcom_selectmysql_execute_commandmysql_parsedispatch_commanddo_commanddo_handle_one_connectionhandle_one_connectionpfs_spawn_threadstart_thread克隆 等等

但是,不幸的是,不幸的是,仍然没有任何线索。请大家给我一些建议,谢谢。

最佳答案

这当然需要深入研究解析器代码,因此我建议与 Mysql 开发人员联系。

另一方面,SHOW CREATE TABLE the_table 的输出对于您的同事来说可能就足够了。

另一方面,您还可以创建一个存储过程来更轻松地完成这项工作。大致如下:

CREATE PROCEDURE info(tablename VARCHAR(200)
BEGIN SELECT column_name, ...,  column_comment FROM information_schema.columns WHERE table_name = tablename;
END;

-- then
CALL info('table_name');

关于mysql - DESCRIBE命令的内部定义是什么以及如何扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18516519/

相关文章:

mysql - 运行查询时没有结果(空白)- 试图从 3 个表中得出结果

php - 如何选择所有行的 HTML 表格

mysql - 在mysql存储过程中使用concat创建json

mysql - 跨 Heroku 将并行化的 Python 抓取到数据库中

python - 为什么我的数据库抛出错误?

mysql - 当找不到 id 时,查询导致 1 行具有空值

Mysql 查询获取预订日期期间,其中预订超过限制

mysql - 创建具有两个外键的表

mysql - 如何高效管理我数据库的新产品?

php - 如何以所需的格式从数据库检索数据(PHP MYSQL)