SQL 语法现状 SQL语言的标准也经历了一系列的发展,大致有SQL86, SQL89, SQL92, SQL/CLI, SQL/PSM, SQL99 几个过程,其中大部分商业数据库目前都支持SQL92。另外,商业数据库使用的SQL 大多有自己的扩展。因此严格来说,SQL 语法没有一个完全统一的标准。 实现范围和方法 即便是 SQL92,完整的分析也是不可能做到的,目前我们仅能就一些基本的不太复杂的语法做一些有限度的分析。考虑到常用数据库的特点,可以以后增加某种数据库的特性支持。 实现上,由于 SQL 语句的复杂性,无法采取完整分析的方法,因此考虑采用经典句型模式匹配加上简单分析的方法来提取一点基本语法单元。这样分析出来的结果应该可以满足设计要求的。 另外,分析程序不能够完全识别语法错误。能够识别词法错误以及基本句型错误。 由于分析程序仅仅支持一些常见基本句型,因此一些提示(HINT),选项(OPTION),以及排序方式等细节将被有意忽略。而且复杂的句型有可能被误识别,导致解释错误。 代码实现以状态图为准。 部分SQL 语法描述 以下部分基于 SQL Server 2000, Oracle 10g, MySQL 5, Sybase ASE 12.5 等产品手册。 语法描述的格式遵从各自的文档习惯。 SQL Server 2000《SQL Server 联机丛书》—Transact-SQL 参考 Oracle 10g《SQL Reference》-- SQL Statements MySQL《MySQL Manual》-- SQL Statement Syntax Sybase 《Sybase® Adaptive Server™ Enterprise 参考手册》—第 二 卷 : 命 令 数据定义语言 创 建 数据库语法 SQL Server CREATE DATABASE database_name [ ON [ < filespec > [ ,...n ] ] [ , < filegroup > [ ,...n ] ] ] [ LOG ON { < filespec > [ ,...n ] } ] [ COLLATE collation_name ] [ FOR LOAD | FOR ATTACH ] MySql CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] Oracle CREATE 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_logging_clauses | tablespace_...