简而言之,在 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.h
、mysqld.cc
、sql_cmd.h
、sql_parse.cc
, sql_yacc.yy
,结果是 info TABLE_Julia
的输出与现在的 desc TABLE_Julia
完全相同,但事实并非如此够了。
我搜索了LEX
、do_select
、JOIN::exec
、mysql_execute_select
、mysql_select
、handle_select
、execute_sqlcom_select
、mysql_execute_command
、mysql_parse
、dispatch_command
、do_command
、do_handle_one_connection
、handle_one_connection
、pfs_spawn_thread
、start_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/