13.2.3 SQL语句基础
13.2.3 SQL语句基础
SQL
的全称是Structured Query Language
,也就是结构化查询语言。SQL
是操作和检索关系数据库的标准语言,标准的SQL
语句可用于操作任何关系数据库。
使用SQL
语句,程序员和数据库管理员(DBA
)可以完成如下任务。
- 在数据库中检索信息。
- 对数据库的信息进行更新。
- 改变数据库的结构。
- 更改系统的安全设置。
- 增加或回收用户对数据库、表的许可权限。
在上面5个任务中,一般程序员可以管理前3个任务,后面2个任务通常由DBA来完成。
标准的SQL语句类型
标准的SQL语句通常可分为如下几种类型。
- 查询语句:主要由
select
关键字完成,查询语句是SQL
语句中最复杂、功能最丰富的语句。 DML
(Data Manipulation Language
,数据操作语言)语句:主要由insert
、update
和delete
三个关键字完成。DDL
(Data Definition Language
,数据定义语言)语句:主要由create
、alter
、drop
和truncate
四个关键字完成。DCL
(Data Control Language
, 数据控制语言)语句:主要由grant
和revoke
两个关键字完成。- 事务控制语句:主要由
commit
、rollback
和savepoint
三个关键字完成。
SQL语句的关键字不区分大小写,也就是说,create和CREATE的作用完全一样。
在上面5种SQL语句中,DCL语句(数据控制语言)用于为数据库用户授权,或者回收指定用户的权限,通常无须程序员操作,所以本节不打算介绍任何关于DCL的知识。
标识符
在SQL命令中也可能需要使用标识符,标识符可用于定义表名、列名,也可用于定义变量等。这些标识符的命名规则如下。
- 标识符通常必须以字母开头。
- 标识符包括字母、数字和三个特殊字符(
#
,_
,$)。 - 不要使用当前数据库系统的关键字、保留字,
通常建议使用多个单词连缀而成,单词之间以_
分隔。同一个模式下的对象不应该同名,这里的模式指的是外模式。
注意truncate
是一个特殊的DDL
语句,truncate
在很多数据库中都被归类为DDL
,它相当于先删除指定的数据表,然后再重建该数据表。如果使用MySQL
的普通存储机制,truncate
确实是这样的。但如果使用InnoDB
存储机制,则比较复杂,在MySQL5.0.3
之前,truncate
和delete
完全一样;在5.0.3之后,truncate
比delete
效率高,但如果该表被外键约束所参照,则依然被映射成delete
操作。当使用快速truncate
时,该操作会重设自动增长计数器。在5.0.13之后,快速truncate
总是可用,即比delete
性能要好。关于truncate
的用法,请参考本章后面内容。