什么是SQL
结构化查询语言(Structured Query Language),简称SQL。它是专门用来访问数据库的标准编程语言。它可以用于存储数据,查询数据,更新数据以及管理关系型数据库等操作。同时,数据库脚本文件的扩展名也是sql。可以通过DBMS对数据库进行定义数据、操纵数据、查询数据、数据控制等
SQL语言可以分成五个部分,分别为DDL、DML、TCL、DCL、DQL
- 数据定义语言(DDL):Data Definition Language
用于建立,删除,修改数据库对象的语言。包含如下关键字:
create:用于创建表或者其他对象的结构
drop:用于删除表或者其他对象的结构
alter:用于修改表或者其他对象的结构
truncate:用于清空表数据,保留表结构
- 数据操纵语言(DML):Data Manipulation Language
用于改变数据表的数据。通常与事务控制语言一起使用,要经过事务控制语言的提交操作,才会真正的将数据持久到数据库中。包含如下关键字:
insert:将数据插入到数据表
update:更新数据表中已存在的数据
delete:删除数据表中的数据
- 数据查询语言(DQL):Data Query Language
用于查询数据表中的数据。或者用于科学计算。关键字如下:
select:选择要显示的数据
- 数据控制语言(DCL):Data Control Language
用于执行关于权限的授予和撤销操作。关键字如下:
create user:创建用户
drop user :删除用户
grant:授权。用于给用户或者角色授予权限
revoke:撤销。用于回收用户或者角色的权限
- 事务控制语言(TCL):Transaction Control Language
用于保证数据的完整性和一致性。
有时候我们的一个需求(一个任务),可能会涉及到多个DML(增删改)操作。那么这一系列操作, 我们要看成一个整体,不可切割。如在一个员工系统中,某员工A的数据可能会存在多个表中,如基本信息表,业务信息表,邮箱信息表等。当我们想删除此人的所有信息时,除了删除这个人的基本信息外,还应该删除与此人有关的其他所有信息,如邮箱,地址等等。这样的操作会涉及到多个DML语句。那么从开始执行到真正结束,就会构成一个事务(Transaction)。对于事务,我们要保证事务的完整性,不能分割。事务要么成功, 要么撤回(回到执行前),不能执行一部分就终止。
只有数据表正在进行DML操作时,才会涉及到事务。
关键字如下:
commit:提交,确任。将已经进行的DML操作的数据持久化
rollback:回滚,回退。用于取消已经进行的DML操作
savepoint:保存点。可以将当前的DML操作回退到指定的保存点,便于取消部分改变
事务的四个特性
(1) 原子性(Atomicity): 即事务要么成功,要么撤回,不可切割。
(2) 一致性(Consistency):事务开始前和结束后,要保证数据的一致性。如转账案例,转账前账号A和账号B的钱的总数为10000。转账后账号A和账号B的钱的总数应该还是10000;
(3) 隔离性(Isolation):当涉及到多用户操作同一张表时,数据库为会每一个用户开启一个事务。那么当其中一个事务正在进行时,其他事务应该处于等待状态。保证事务之间不会受影响。
(4) 持久性(Durability): 当一个事务被提交后,我们要保证数据库里的数据是永久改变的。即使数据库崩溃了,我们也要保证事务的完整性。
常用的SQL语法
- 数据定义语言(DDL)的操作语法
(1)创建表结构
create table tName(colName1 type1,...,colNameN typeN) [engine=innodb][default character set cName][collate utf8_general_ci]);
(2)显示表结构
desc tName;
或
show columns from tName;
(3)添加表字段(关键字:add)
alter table tName add colName Type;
(4)删除表字段(关键字:add)
alter table tName drop colName;
(5)修改表字段名称/类型(关键字:change/modify)
alter table tName change colName newcolName newType;
alter table tName modify colName newType;
(6)修改表名(关键字:rename)
alter table oldtName rename newtName;
(7)清空表数据,保留表结构(关键字:truncate)
truncate table tName;
(8)删除表结构(关键字:drop)
drop table tName;
(9)复制表结构(关键字:like)
create table newtName like oldtName;
- 数据操纵语言(DML)的操作语法
(1)插入数据到表中(关键字:insert into)
insert into tName(colName1, ... ,colNameN) values (value1, ... ,valueN);
insert into tName values (value1, ... ,valueN); 按照建表字段顺序对应赋值
(2)修改表中数据(关键字:update...set)
update tName set colName1=value1, ... ,colNameN=valueN [ where 条件 ] ;
(3)删除表中数据(关键字:delete)
delete from tName [ where 条件 ];
- 数据查询语言(DQL)的操作语法``
(1)查询表中数据(部分字段显示)
select colName1,......,colNameN from tName [where 子句] [ group by 子句] [ having 子句] [order by子句];
(2)查询表中数据(所有字段显示)
select * from tName;
*:通配符,表示所有字段
六个子句的执行顺序
1.from子句
2.where子句
3.group by子句
4.having子句
5.select子句
6.order by子句
where子句
作用:在对表进行操作时,起到条件约束限制的作用
(1)关系运算符
>,>=,<,<=,=,!=,<>
(2)连接符
and,or,
(3)范围查询
[not] between field1 and field2
范围内: [field1,field2] 闭区间
between .. and .. 相当于连接符的and
not between..and..相当于连接符的or
(4)集合
[not] in (集合元素)
in (集合元素) 相当于连接符的or
not in (集合元素) 相当于连接符的and
all/any
>all(集合元素):大于集合中最大的即可
<all(集合元素):小于集合中最小的即可
>any(集合元素):大于集合中最小的即可
<any(集合元素):小于集合中最大的即可
注意:
mysql不支持all/any后直接写集合元素
支持all/any后写子查询查询出来的集合。
(5)模糊查询:like
通配符:
%:匹配0个或0个以上的任意字符
_:匹配1个任意字符
语法:
fieldName like '%s%'
fieldName like '_s%'
fieldName like '_s_a%'
order by子句
作用:对需要所显示出来的字段数据进行排序
关键字:ASC表示升序,DESC表示降序。
默认不写时为升序。
语法:
order by field1 asc|desc[,field2 asc|desc][...]
group by子句
作用:在查询时,将表中的数据按照相应的字段,根据值的不同,来划分成不同的小组。
在做分组查询时,一般都会涉及到相应的分组函数(也叫聚合函数),而所有聚合函数都会忽略null,不进行统计。
count(colName):统计指定字段的字段值的记录总数,null值会被忽略。
max(colName):返回指定字段的字段值中的最大值,null值会被忽略。
min(colName):返回指定字段的字段值中的最小值,null值会被忽略。
sum(colName):返回指定字段的字段值的和,null值会被忽略。
avg(colName):返回指定字段的字段值的平均值,null值会被忽略。
注意:
在使用avg()函数时,其忽略空值记录。
如果根据需求要将null值记录计算在内,我们可以使用这个函数:ifnull(colName,value),
它的作用是如果指定的colName对应的值有null,我们就使用value值,否则使用其本身
- 数据控制语言(DCL)的操作语法
(1)创建用户
create user username@ip identified by newPassword;
(2)修改密码
alter user username@ip identified by newPassword;
(3)显示用户的权限
show grants for username@ip;
(4)授权语句
grant 权限1,权限2, ... on databaseName.* to username@ip;
DDL权限: create、alter、drop、truncate 、create view
DML权限: insert、delete、update
DQL权限: select
(5)撤销权限
revoke 权限1,权限2, ... on databaseName.* from username@ip;
(6)删除用户
drop user username;
(7)权限立即生效语句
flush privileges;
- 事务控制语言(TCL)的操作语法
(1)commit:用于提交,表示事务成功结束。用于确认数据的更改,持久化。
(2)rollback:用于回滚,回退到事务开始前。取消所有的DML操作。
(3)savepoint: 设置事务的保存点,可以回退到指定的保存点。