一、SQL是什么?
SQL是结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL是关系型数据库系统的标准语言,所有关系数据库管理系统,如MySQL,MS Access,Oracle,SYBASE,Postgres和MSSQL服务器都使用SQL数据库语言。为了在各个数据库厂商之间取得更大的统一性,美国国家标准学会(American NationalStandards Institute,ANSI)于1986年发布了第一个SQL标准,并于1989年发布了第二个版本,该版本已经被广泛地采用。ANSI在1992年更新了SQL标准的版本,即SQL92和SQL2;并于1999年再次更新为SQL99和SQL3标准。在每一次更新中,ANSI都在SQL中添加了新特性,并在语言中集成了新的命令和功能。
不同的是,虽然SQL有标准,但是很多厂商还是扩展了SQL。各种不同的数据库对SQL语言的支持与标准存在着细微的不同,这是因为,有的产品的开发先于标准的公布,另外,各产品开发商为了达到特殊的性能或新的特性,需要对标准进行扩展。已有100多种遍布在从微机到大型机上的数据库产品SQL,其中包括DB2、SQL/DS、ORACLE、INGRES、SYBASE、SQLSERVER、DBASEⅣ、PARADOX、MICROSOFTACCESS等。
二、SQL发展历史
1970年,IBM公司的研究员、有“关系数据库之父”之称的E.F.Codd博士在刊物《Communication of the ACM》上发表了题为“A Relational Model of Data for Large Shared Data banks(大型共享数据库的关系模型)”的论文,文中首次提出了“数据库的关系模型”的概念,奠定了关系模型的理论基础。后来Codd又陆续发表多篇文章,论述了范式理论和衡量关系系统的12条准则,用数学理论奠定了关系数据库的基础。IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language,结构化查询语言)语言。由于关系模型的相关书籍简单明了、具有坚实的数学理论基础,因此一经推出就受到了学术界和产业界的高度重视和广泛响应,并很快成为数据库市场的主流。20世纪80年代以来,计算机厂商推出的数据库管理系统几乎都支持关系模型,数据库领域当前的研究工作都以关系模型为基础。
关系数据库是在数学的基础上发展起来的,关系对应数学中集合的概念。数据库中常见的查询操作其实对应的是集合的某些运算:选择、投影、联接、并、差、交、除。最终的结果虽然是以一张二维表的方式呈现在用户面前,但是从数据库内部来看是一系列的集合操作。因此,对于表中的记录,用户需要以集合的思想来理解。表中的数据是集合中的元素,而集合是无须的。因此对于没有ORDER BY子句的SQL语句,其解析结果应为:从集合中选择期望的子集合。这表明结果并不一定要有序。
1978,IBM致力于发展Codd的想法,并发布了名为System/R的产品。同时,美国国家标准学会(American NationalStandards Institute,ANSI)于1986年发布了第一个SQL标准,并于1989年发布了第二个版本,该版本已经被广泛地采用。
1986,IBM研制出第一台样机的关系型数据库和标准的ANSI。第一个关系数据库关系的软件和后来成为甲骨文发布了。
三、SQL语句处理
当执行一个SQL命令在RDBMS,该系统确定最佳的方式来进行处理请求及SQL引擎如何解释任务。这一过程包括的各种部件。这些组件查询调度,优化引擎,经典的查询引擎和SQL查询引擎等经典查询引擎处理所有非SQL查询,SQL查询引擎将无法处理逻辑文件。
下面是一个简单的数据图显示SQL架构:
四、SQL语句分类
SQL语句大概分为以下几种,语法以MySQL为标准。
- DDL(Data Definition Language,数据定义语言)
用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,比如库、表、视图等等。DDL对这些对象和属性的管理和定义具体表现在Create、Drop和Alter语句上。DDL操作的是“对象”的概念,而”对象“包括对象及对象的属性,而且对象最小也比记录大一个层次。以表举例:Create创建数据表,Alter可以更改该表的字段,DROP可以删除这个表,从这里我们可以看到,DDL所站的高度,他不会对具体的数据进行操作。DDL语句大概包含如下语句。
CREATE – 创建数据库、表、函数、存储过程、视图、索引、触发器的语句。
ALTER – 更改数据库、表、函数、存储过程、视图的语句。
DROP – 删除数据库、表、函数、存储过程、视图、索引、触发器的语句。
RENAME TABLE – 重命名数据库表的语句。
RUNCATE TABLE – 清除数据库表数据和auto_increment值的语句。
- DML(Data Manipulation Language,数据操作语言)
用于操作数据库对象中包含的数据,也就是说操作的单位是记录(操作表记录)。DML语句大概包含如下语句。
INSERT – 向数据库表中插入新纪录的语句。
UPDATE – 更新数据库表中记录的语句。
DALETE – 删除数据库表中记录的语句。
REPLACE – 替换数据库表中记录的语句,如果没有要替换的记录,就会向INSERT一样插入新数据。
LOAD DATA INFILE – 读取外部文本文件的语句。
CALL – 调用存储过程的语句。
DO – 执行表达式的语句。
- DQL(Data Query Language,数据查询语言)
也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
SELECT – 查看数据库表中记录的语句。
- DCL(Data controller Language,数据控制语言)
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。MySQL用GRANT或REVOKE控制对库表的访问。
GRANT – 用于给用户指定权限的语句。
REVOKE – 用于移除指定用户的指定权限的语句。
- TPL(Transaction Process Language,事务处理语言)
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
START TRANSACTION,COMMIT,ROLLBACK – 用于事务的开始,提交和事务回滚的语句。
SAVEPOINT,ROLLBACK TO ROLLBACK,RELEASE SAVEPOINT – InnoDB存储引擎支持SQL语句保存点,回滚到保存点,释放保存点和回滚保存点。
SET TRANSACTION – 此语句指定事务特性,它需要一个或多个特征值用逗号隔开,这些特性设置事务隔离级别或访问模式,隔离级别是用于对InnoDB表的操作。访问模式可以被指定为MySQL 5.6.5和指示是否在读/写操作的事务或只读模式。
XA transactions – 用于分布式事务中的语句。
- 主从复制语句
PURGE BINARY LOGS – 删除二进制日志文件(可以指定文件或日期)的语句。
RESET MASTER – 删除所有的二进制日志文件,重置二进制日志索引文件是空的,并创建一个新的二进制日志文件的语句。
CHANGE MASTER TO – 从服务器连接主服务器的语句。
MASTER_POS_WAIT() – 这是一个函数,用来指定Slave可以读的二进制事件和位置。
RESET SLAVE – 重置Slave,它会清除主信息和中继日志信息库,删除所有的中继日志文件,并启动了一个新的中继日志文件。
SET GLOBAL sql_slave_skip_counter – 用于Slave跳过从Master复制中的一个事件,需要在slave处于stop状态下。
START SLAVE – 用于启动Slave的IO线程(复制Master数据到中继日志)和SQL线程(执行中继日志语句)。
STOP SLAVE – 用于停止Slave的IO线程(复制Master数据到中继日志)和SQL线程(执行中继日志语句)。
- 账号管理语句
CREATE USER – 创建用户的语句。
ALTER USER – 修改用户的语句。
DROP USER – 删除用户的语句。
RENAME USER – 重命名用户的语句。
SET PASSWORD – 用于用户设置密码的语句。
- 表维护语句
ANALYZE TABLE – 用于分析表。
CHECK TABLE – 用于检查表错误。
CHECKSUM TABLE – 用于检验表。
OPTIMIZE TABLE – 用于优化表。
REPAIR TABLE – 用于修复可能损坏的表。
- 插件管理语句
INSTALL PLUGIN – 用于安装插件。
UNINSTALL PLUGIN – 用于卸载插件。
- 服务器锁
LOCK TABLES – MySQL服务器级的锁控制语句,表级排他锁。
UNLOCK TABLES – MySQL服务器级的锁控制语句,释放表级排他锁。
- SET语句
1 2 3 4 5 6 |
# 用来设置全局和会话变量(已存在的变量)的值; SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000; SET @@local.sort_buffer_size=10000; # 用来设置自定义变量的值; SET @c=1; |
- SHOW语句
SHOW语句有许多形式,提供关于服务器的数据库、表、列或状态的信息。如果对于一个给定的说明语句的语法包括像’模式’,’模式’是一个字符串,可以包含SQL”%”和”_”通配符。
1 |
SHOW ENGINE | BINARY | BINLOG LOGS | COLLATION … |
- 更多其他语句
DESCRIBE – 显示数据库表结构的语句。
EXPLAIN – 显示SQL语句执行计划的语句。
HELP – MySQL帮助语句。
USE – 设置默认数据库的语句。
FLUSH – 用于刷新缓存,表的语句。
RESET QUERY CACHE – 清除缓存的语句。
KILL – 结束MySQL内部线程的语句(SHOW PROCESSLIST可以查看正在运行的线程)。