大概上半年接了一本《深入理解MySQL》,看了个一知半解吧!这里不得不说这本书有点贪大求全了。什么存储引擎、sql解析、查询优化等等的内容都涉及。如果领悟能力高的话,可能对数据库有一种全局的把握。不然的话还是需要看看其他资料了。当时不懂sql编译原理(其实现在也不懂,这货太愁银了),以为sql解析应该是一个简单的事情。毕竟不需要生成最终机器代码嘛,其实不然呀!举个例子吧,使用flex和bison为ANSI C和SQL构建编译器。MySQL的SQL语法文件有一万多行,而ANSI C就几百行。我顿时感觉事情不是我想的那样了。SQL也不是吃素的呀!前面一直在啃《flex&bison》,虽说是讲工具的使用,但是毕竟是编译呀!尤其对我这样的原理爱好者,简直好折磨。不过一知半解怎么也比眼前一抹黑要好。
在MySQL中,SQL语法分析器的输出是语法树;而在《flex&bison》中,分析器的输出是逆波兰式代码。不过大同小异吧,作用其实是一样的。这书里面主要实现了select语句,作者说select是SQL中最复杂的语句了,想想也是,数据库的最大的作用不就是提供查询服务嘛!
在MySQL中,SQL语法分析器的输出是语法树;而在《flex&bison》中,分析器的输出是逆波兰式代码。不过大同小异吧,作用其实是一样的。这书里面主要实现了select语句,作者说select是SQL中最复杂的语句了,想想也是,数据库的最大的作用不就是提供查询服务嘛!
select_stmt: SELECT select_opts select_expr_list
{ emit("SELECTNODATA %d %d", $2, $3); } ;
| SELECT select_opts select_expr_list
FROM table_references
opt_where opt_groupby opt_having opt_orderby opt_limit
opt_into_list { emit(&#