数据库排名:
Oracle(关系型)
MySQL(关系型)
SQLServer(关系型)
PostgreSQL(关系型)
MongoDB(非关系数据库)
DB2(关系型)
Redis(非关系数据库)
ElasticSearch(非关系数据库)
SQL语句(结构化查询语言)
DDL(数据定义语言):create / drop / alter
DML(数据操作语言):insert / delete / update / select
DCL(数据控制语言):grant / revoke
<font size="4">前言:SQL中大小写不敏感(大写和小写是一样的); 每条SQL语句必须以分号结束</font>
一、DDL(数据定义语言)
主要提供数据库和表的创建、删除和修改
1. 创建数据库
语法 |
功能 |
create database 数据库名; |
直接创建指定数据库 |
create database if not exists 数据库; |
当指定数据库不存在的时候才创建数据库 |
create database if not exists 数据库 default charset utf8; |
创建数据库时设置字符集编码方式为utf8,让数据库支持中文数据存储 |
2.删除数据库
语法 |
功能 |
drop database 数据库; |
直接删除指定数据库 |
drop database if exists 数据库; |
如果指定的数据库存在就删除数据库 |
3. 使用/切换数据库
语法 |
功能 |
use 数据库; |
使用/切换指定数据库 |
4. 新建表
语法 |
功能 |
create table if not exists 表(字段1 类型1, 字段2 类型2,...); |
新建表,表名一般加前缀't'或'tb',字段名不能是关键字 |
create table if not exists 表(字段1 类型1 约束1, 字段2 类型2 约束2,...); |
新建表并且添加约束 |
5. 删除表
语法 |
功能 |
drop table if exists 表; |
删除指定表 |
truncate table 表; |
清空指定表 |
6. 修改表
语法 |
功能 |
alter table 表 add column 字段 类型 约束; |
添加列 |
alter table 表 drop column 字段; |
删除列 |
二、DML(数据操作语言)
主要针对数据库中数据的增、删、改、查
1. 增
语法 |
功能 |
insert into 表 values(值1, 值2, 值3,...); |
插入数据,依次给指定表中的字段赋值 |
insert into 表(字段1, 字段2,...) values(值1, 值2,...); |
插入数据,以指定顺序给指定字段赋值,可一次插入多条数据,用逗号分开 |
(注)时间函数:now() - 当前时间;date(now()) - 当前日期;year(now()) - 当前年;month(now()) - 当前月
2. 删
语法 |
功能 |
delete from 表; |
删除指定表中所有记录 |
delete from 表 where 条件语句; |
删除满足条件的记录 |
3. 改
语法 |
功能 |
update 表 set 字段1=新值1, 字段2=新值2,...; |
将指定表中所有行的指定列/字段的值赋值为新值 |
update 表 set 字段1=新值1, 字段2=新值2,... where 条件语句; |
将表中满足条件的行中指定列/字段的值赋值为新值 |
4. 查
语法 |
功能 |
select * from 表; |
获取指定表中所有行和所有的列(所有数据) |
select 字段1,字段2,... from 表; |
获取指定表中所有行指定的列 |
select * from 表 where 条件; |
获取指定表中所有满足条件的行所有列的数据 |
select 字段1 as 新字段1, 字段2 as 新字段2,... from 表; |
列重命名(as可以省略) |
select if(字段,值1,值2) from 表; |
(MySQL写法)查询指定字段,字段真则结果为值1,假则结果为值2 |
select case 字段 when 值 then 新值1 else 新值2 end; |
(通用写法)查询指定字段并将结果重新赋值 |
select concat(字段1,字段2,...) from 表; |
对列进行合并,数字和字符串数据可合并,bit类型数据不可合并 |
排序:(先按之前的任何语法进行查询再排序) |
select * from 表 order by 字段; |
对查询结果按照指定字段的值进行升序排序 |
select * from 表 order by 字段 asc; |
对查询结果按照指定字段的值进行升序排序 |
select * from 表 order by 字段 desc; |
对查询结果按照指定字段的值进行降序排序 |
注:多个字段排序,写在前面的优先级高 |
限制: |
select * from 表 limit N; |
获取查询结果的前N条记录 |
select * from 表 limit M offset N; |
对查询结果跳过前N条数据,取M条数据出来 |
去重: |
select distinct 字段 from 表; |
查询结果去重 |
5. 条件语句
在SQL中可以通过 where 条件语句
,来对操作对象进行筛选
条件语句:
语法 |
功能 |
= |
等于 |
<> |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
is/is not |
判断是否等于null空时使用 |
and |
逻辑与运算 |
or |
逻辑或运算 |
not |
逻辑非 |
in |
集合中是否包含 |
like |
模糊查询 |
% |
表示0个或多个的任意字符 |
_ |
表示一个任意字符 |
between 值1 and 值2 |
筛选指定字段的值在值1和值2之间 |
6. 数据类型
名称 |
功能 |
int/tinyint(-128~127) |
整数 |
float(size,d)/double(size,d) |
浮点数,这儿的size和d的值都有约束效果 |
char(size) |
定长字符 |
varchar(size) |
不定长字符串,size决定的是最大长度 |
text |
不限长度(最大是255个字符) |
bit |
布尔,只有0和1两个值 |
date/datetime/time |
值可以是时间函数的结果,也可以是时间字符串;计算或者是比较的时候内部是按时间处理的 |
7. 约束
创建表的时候可以添加约束
约束索引:
语法 |
功能 |
alter table 表 add constraint 索引 约束(字段); |
添加约束,索引(自己命名),约束(支持唯一约束、主键约束和外键约束) |
alter table 表 drop index 约束索引; |
删除约束 |
常见约束:
语法 |
功能 |
not null |
不为空 |
default 值 |
设置默认值 |
unique |
值唯一 |
primary key(字段) |
主键约束(唯一记录) |
auto_increment |
主键自动增长 |
8. 外键
添加外键:
语法 |
功能 |
alter table 表1 add constraint 索引 foreign key (字段1) references 表2 (字段2); |
将表1中字段1设为外键,让其参照表2中字段2 |
删除外键:
语法 |
功能 |
alter table 表 drop foreign key 外键索引; |
先,删除外键约束 |
alter table 表 drop index 外键索引; |
后,删除约束的索引 |
9. 聚合
max() min() sum() avg() count()
语法 |
功能 |
select 聚合函数(字段) from 表 [where 条件]; |
[按条件]查询后将结果做相应的聚合运算 |
10. 分组
语法 |
select 字段操作 from 表 [where 条件] group by(字段); |
先筛选在分组 |
select 字段操作 from 表 group by(字段) [having 条件]; |
先分组在筛选 |
where和having可同时使用
功能:将表中[满足条件]的记录按照字段分组, 再将每个分组作为整体做聚合操作,字段操作的位置除了分组字段不用聚合,其他字段都必须聚合
11. 子查询
将一个查询操作的结果作为另外一个查询的数据源
12. 连接查询
语法 |
功能 |
select * from 表1,表2,...where 表1表2连接条件...; |
普通连接 |
select * from 表1 inner join 表2 on 表1表2连接条件 inner join 表3 on 表1表3连接条件...; |
内连接 |
select * from 表1 left join 表2 on 表1表2连接条件...[where 条件]; |
左外连接,右表值不存在则为null |
select * from 表1 right join 表2 on 表1表2连接条件...[where 条件]; |
右外连接,左表值不存在则为null |
13. 字段索引
字段索引相当于目录,作用为快速对此字段进行查找
只针对某个查询很频繁的字段,建议添加对应索引
语法 |
功能 |
create index 索引 on 表 (字段); |
添加索引 |
alter table 表 drop index 索引; |
删除索引 |
三、DCL(数据控制语言)
1. 创建用户
create user '用户名'@'登录地址' identified by '密码';
登录地址 |
作用 |
localhost |
数据库本机 |
ip地址 |
指定地址 |
% |
任何位置 |
2. 删除用户
drop user 用户名;
3. 授权
语法 |
功能 |
grant 权限类型 on 数据库.对象 to '用户'; |
为指定用户添加指定数据库指定对象的指定权限 |
grant 权限类型 on 数据库.对象 to '用户' with grant option; |
添加权限,并且可以将自己的权限再授权给别人 |
revoke 权限类型 on 数据库.对象 from 用户名; |
撤销/召回权限 |
权限类型 |
功能 |
select |
查看 |
insert |
添加 |
delete |
删除 |
update |
更新 |
create |
创建 |
drop |
删除 |
alter |
更改 |
all privileges |
所有权限 |
4. 事务
语法 |
功能 |
begin; |
开启事务环境 |
commit; |
事务提交 |
rollback; |
事务回滚 |
只有begin;
到commit;
之间的所有的sql都执行成功,才会执行commit;
否则执行rollback;
网友评论