SQL语法分析和SQL解释实现.doc
《SQL语法分析和SQL解释实现.doc》由会员分享,可在线阅读,更多相关《SQL语法分析和SQL解释实现.doc(34页珍藏版)》请在沃文网上搜索。
1、SQL语法现状SQL语言的标准也经历了一系列的发展,大致有SQL86, SQL89, SQL92, SQL/CLI, SQL/PSM, SQL99几个过程,其中大部分商业数据库目前都支持SQL92。另外,商业数据库使用的SQL大多有自己的扩展。因此严格来说,SQL语法没有一个完全统一的标准。实现范围和方法即便是SQL92,完整的分析也是不可能做到的,目前我们仅能就一些基本的不太复杂的语法做一些有限度的分析。考虑到常用数据库的特点,可以以后增加某种数据库的特性支持。实现上,由于SQL语句的复杂性,无法采取完整分析的方法,因此考虑采用经典句型模式匹配加上简单分析的方法来提取一点基本语法单元。这样分
2、析出来的结果应该可以满足设计要求的。另外,分析程序不能够完全识别语法错误。能够识别词法错误以及基本句型错误。由于分析程序仅仅支持一些常见基本句型,因此一些提示(HINT),选项(OPTION),以及排序方式等细节将被有意忽略。而且复杂的句型有可能被误识别,导致解释错误。代码实现以状态图为准。部分SQL语法描述以下部分基于SQL Server 2000, Oracle 10g, MySQL 5, Sybase ASE 12.5等产品手册。语法描述的格式遵从各自的文档习惯。SQL Server 2000SQL Server联机丛书Transact-SQL参考Oracle 10gSQL Refere
3、nce- SQL StatementsMySQLMySQL Manual- SQL Statement SyntaxSybase Sybase Adaptive Server Enterprise参考手册第二卷:命令数据定义语言创建数据库语法SQL ServerCREATE DATABASE database_name ON ,.n , ,.n LOG ON ,.n COLLATE collation_name FOR LOAD | FOR ATTACH MySqlCREATE DATABASE IF NOT EXISTS db_namecreate_specification , creat
4、e_specification .OracleCREATE DATABASE database USER SYS IDENTIFIED BY password | USER SYSTEM IDENTIFIED BY password | CONTROLFILE REUSE | MAXDATAFILES integer | MAXINSTANCES integer | CHARACTER SET charset | NATIONAL CHARACTER SET charset | SET DEFAULT BIGFILE | SMALLFILE TABLESPACE | database_logg
5、ing_clauses | tablespace_clauses | set_time_zone_clause . ;Sybasecreate database database_nameon default | database_device = size, database_device = size.log on database_device = size, database_device = size.with override | default_location = pathnamefor load | proxy_update目前支持CREATE DATABASE db_nam
6、e 忽略不支持不支持Mysql IF NOT EXIST 语法;不支持Oracle CREATE DATABASE db_name 语法;状态图创建表语法SQL ServerCREATE TABLE database_name. owner .| owner. table_name ( | column_name AS computed_column_expression | := CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE ,.n ) ON filegroup | DEFAULT TEXTIMAGE_ON filegroup | DEF
7、AULT MySqlCREATE TEMPORARY TABLE IF NOT EXISTS tbl_name (create_definition,.) table_options select_statementOr: CREATE TEMPORARY TABLE IF NOT EXISTS tbl_name ( LIKE old_tbl_name );OracleCREATE GLOBAL TEMPORARY TABLE schema. table (relational_properties) ON COMMIT DELETE | PRESERVE ROWS physical_prop
8、erties table_properties ;或者CREATE GLOBAL TEMPORARY TABLE schema. table OF schema. object_type object_table_substitution (object_properties) ON COMMIT DELETE | PRESERVE ROWS OID_clause OID_index_clause physical_properties table_properties ;或者CREATE TABLE GLOBAL TEMPORARY TABLE schema. table OF XMLTYP
9、E (oject_properties) XMLTYPE XMLType_storage XMLSchema_spec ON COMMIT DELETE | PRESERVE ROWS OID_clause OID_index_clause physical_properties table_properties ;Sybasecreate table database.owner.table_name(column_name datatypedefault constant_expression | user | nullidentity | null | not nulloff row |
10、 in row| constraint constraint_nameunique | primary keyclustered | nonclustered asc | descwith fillfactor = pct| max_rows_per_page = num_rows , reservepagegap = num_pages on segment_name| references database.owner.ref_table(ref_column)| check (search_con ion).| constraint constraint_nameunique | pri
11、mary keyclustered | nonclustered(column_name asc | desc, column_name asc | desc.)with fillfactor = pct| max_rows_per_page = num_rows ,reservepagegap = num_pages on segment_name|foreign key (column_name , column_name.)references database.owner.ref_table(ref_column , ref_column.)| check (search_con io
12、n) . , next_column | next_constraint.)lock datarows | datapages | allpages with max_rows_per_page = num_rows ,exp_row_size = num_bytes ,reservepagegap = num_pages on segment_name external table at pathname SQL92CREATE GLOBAL | LOCAL TEMPORARY TABLE ON COMMIT DELETE | PRESERVE ROWS 目前支持CREATE GLOBAL
13、| LOCAL TEMPORARY TABLE table_exp 忽略SQL Server / Sybase table_exp := database_name. owner .| owner. table_nameOracle table_exp := schema. table不支持不支持Mysql CREATE TEMPORARY TABLE IF NOT EXISTS tbl_name状态图创建视图语法SQL ServerCREATE VIEW . . view_name ( column ,.n ) WITH ,.n AS select_statement WITH CHECK
14、OPTION MySql OracleCREATE OR REPLACE NO FORCE VIEW schema. view (alias inline_constraint inline_constraint . | out_of_line_constraint, alias inline_constraint inline_constraint . | out_of_line_constraint.)| object_view_clause| XMLType_view_clauseAS subquery subquery_restriction_clause ;Sybasecreate
15、view owner.view_name(column_name , column_name.)as select distinct select_statementwith check optionSQL92CREATE VIEW AS WITH CHECK OPTION 目前支持CREATE ! VIEW view_exp 忽略不支持状态图部分DDL语法汇总状态图CREATE ! PROC | PROCEDURE | INDEX | TRIGGER obj_exp 忽略ALTER ! DATABASE | TABLE | VIEW | PROC | PROCEDURE | INDEX |
16、TRIGGER obj_exp 忽略DROP DATABASE | VIEW | PROC | PROCEDURE | INDEX | TRIGGER obj_exp,n 忽略或者DROP TABLE table_exp 忽略数据操作语言SELECT语法SQL Server SELECT select_list INTO new_table FROM table_source WHERE search_condition GROUP BY group_by_expression HAVING search_condition ORDER BY order_expression ASC | DE
17、SC MySql SELECTALL | DISTINCT | DISTINCTROW HIGH_PRIORITYSTRAIGHT_JOINSQL_SMALL_RESULT SQL_BIG_RESULT SQL_BUFFER_RESULTSQL_CACHE | SQL_NO_CACHE SQL_CALC_FOUND_ROWSselect_expr,.INTO OUTFILE file_name export_options| INTO DUMPFILE file_nameFROM table_referencesWHERE where_definitionGROUP BY col_name |
18、 expr | positionASC | DESC, . WITH ROLLUPHAVING where_definitionORDER BY col_name | expr | positionASC | DESC ,.LIMIT offset, row_count | row_count OFFSET offsetPROCEDURE procedure_name(argument_list)FOR UPDATE | LOCK IN SHARE MODEOracle SELECT hint DISTINCT | UNIQUE | ALLselect_listFROM table_refer
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 语法分析 解释 实现
