本页使用了标题或全文手工转换

SQL

维基百科,自由的百科全书
跳转至: 导航搜索

结构化查询语言英语Structured Query Language缩写SQL),是一种特殊目的之编程语言,用于数据库中的标准数据查询语言IBM公司最早使用在其开发的数据库系统中。1986年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。

历史[编辑]

在1970年代初,由IBM公司San Jose,California研究实验室的埃德加·科德发表将数据组成表格的应用原则(Codd's Relational Algebra)。1974年,同一实验室的D.D.Chamberlin和R.F. Boyce对Codd's Relational Algebra在研制关系数据库管理系统System R中,研制出一套规范语言-SEQUEL(Structured English QUEry Language),并在1976年11月的IBM Journal of R&D上公布新版本的SQL(叫SEQUEL/2)。1980年改名为SQL。

1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2和SQL/DS数据库系统中也实现了SQL。

1986年10月,美国ANSI采用SQL作为关系数据库管理系统的标准语言(ANSI X3. 135-1986),后为国际标准化组织(ISO)采纳为国际标准。

1989年,美国ANSI采纳在ANSI X3.135-1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSI SQL 89,该标准替代ANSI X3.135-1986版本。该标准为下列组织所采纳:

国际标准化组织(ISO),为ISO 9075-1989报告“Database Language SQL With Integrity Enhancement”

美国联邦政府,发布在The Federal Information Processing Standard Publication(FIPS PUB)127

目前,所有主要的关系数据库管理系统支持某些形式的SQL,大部分数据库打算遵守ANSI SQL89标准。

语言特点[编辑]

SQL是高级的非过程化编程语言,它允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解其具体的数据存放方式。而它的界面,能使具有底层结构完全不同的数据库系统和不同数据库之间,使用相同的SQL作为数据的输入与管理。它以记录项目〔records〕的合集(set)〔项集,record set〕作为操纵对象,所有SQL语句接受项集作为输入,回提交的项集作为输出,这种项集特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它拥有极大的灵活性和强大的功能。在多数情况下,在其他编程语言中需要用一大段程序才可实践的一个单独事件,而其在SQL上只需要一个语句就可以被表达出来。这也意味着用SQL可以写出非常复杂的语句。

SQL同时也是数据库文件格式扩展名

SQL包含四个部分:

标准化[编辑]

以SQL为基础的其他延伸语言[编辑]

微软MS SQL-Server,以及Sybase Adaptive Server系列数据库所用的SQL
Oracle 数据库所使用的SQL

安全问题[编辑]

由于SQL指令在部分高级使用时,语法会依照特定条件来变换,而且若是表格中的字段过多时,许多开发人员都会习惯以字符串组立的方式创建SQL指令,而且又使用系统管理员级的账户连到数据库,因此让黑客有机会利用SQL的组立方式进行攻击,像是在指令中添加部分刺探性或破坏性的指令(例如DROP TABLEDROP DATABASE或是DELETE * FROM myTable等具破坏性的指令),让数据库的数据或实体服务器被破坏,导致服务中断或是系统瘫痪等后果,或是以逻辑的漏洞,在密码栏写入特殊字符串(例如' or '1'='1),让该字符串形成的逻辑判断永远为真,而不需要知道密码,以达成非法登录系统的目的,此种攻击手法称为SQL注入(SQL injection)。

目前实务上较有效的防御方法,就是全面改用参数化查询

参考资料[编辑]

相关[编辑]

Wikibooks-logo.svg
您可以在维基教科书中查找此百科条目的相关电子教程:

外部链接[编辑]


数据库管理系统(DBMS) 查看 · 讨论 · 编辑

概念
数据库 · 数据模型 · 数据库存储结构英语Database storage structures · 关系 (数据库) · 关系模型 · 分布式数据库 · ACID ( 原子性英语Atomicity (database systems) · 一致性· 隔离性· 持久性英语Durability (database systems) ) · Null值
关系数据库 · 关系模型 · 数据库规范化 · 数据库完整性 · 实体完整性 · 引用完整性英语Referential integrity · 关系数据库管理系统 
主键 · 外键 · 代理键 · 超键 · 候选键 

数据库组件
触发器 · 视图 · 数据库表 · 指标 (数据库) · 事务日志英语Transaction log · 数据库事务 · 并发控制 · 乐观锁 · 悲观锁 · 数据库索引 
存储程序 · 数据库分区

SQL
分类: 数据查询语言(DQL) - 数据定义语言(DDL) - 数据操纵语言(DML) - 数据控制语言(DCL)
指令:SELECT · INSERT · UPDATE · MERGE · DELETE · JOIN · UNION · CREATE · DROP · Begin work · COMMIT · ROLLBACK · TRUNCATE · ALTER
安全: SQL注入攻击 · 参数化查询

数据库管理系统的实现

实现类型
关系数据库 · 文件型数据库 · Deductive · 维度化数据库 · 层次结构式 · 图形数据库 · NoSQL· 对象数据库 · 对象关系数据库 · Temporal · XML数据库

数据库产品
对象型对比) · 关系型对比

数据库组件
数据查询语言 · 查询优化器 · 查询项目 · 嵌入式SQL · ODBC · JDBC · OLE DB