SQL通用语法
-
SQL语句可以单行或多行书写,以分号结尾
-
SQL语句可以使用空格/缩进来增强语句的可读性
-
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
-
注释:
-
单行:-- 或 #
-
多行:/* */
-
SQL语句分类
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象 |
DML | Data Manipulation Language | 数据库操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语句,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户 控制数据库的访问权限 |
数据类型
-
数值类型
tinyint
int
double -
字符串类型 varchar char
-
日期时间类型 date time datetime
DDL 数据定义语言
-
查询
--查询所有数据库
SHOW DATABASES;
--查询当前数据库
SELECT DATABASE();
- 创建
--[] 内可省略
CREATE DATABASE[IF NOT EXISTS] 数据库名称 [DEFAULT CHARSET 字符集][COLLATE 排序规则];
- 删除
DROP DATABASE[IF EXISTS]数据库名称
- DDL-表操作-创建
CREATE TABLE 表名(
字段1 字段1类型[comment注释],
字段2 字段2类型[comment注释],
...
字段n 字段n类型[comment注释]
)[comment表注释]
craete table tb_user(
id int comment '编号',
name varchar(50) comment '姓名'
age int comment '年龄'
gender varchar(1) comment '性别'
)
- DDL-表操作-修改\
--添加字段
alter table 表名 add 字段名 类型(长度)[comment注释][约束];
--修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
--修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度)[comment注释][约束];
--删除字段
alter table 表名 drop 字段名;
--修改表名
alter table 表名 rename to 新表名;
--删除表
drop table [if exists] 表名;
truncate table 表名;--删除后重新创建
DML 数据库操作语言
-
DML-添加数据
--给指定的字段添加数据
insert into 表名(字段1,字段2...)values(值1,值2...);
--给所有的字段添加数据
insert into 表名 values(值1,值2...);
--批量添加数据
insert into 表名(字段1,字段2...)values(值1,值2...)
(值1,值2...)(值1,值2...);
insert into 表名 values(值1,值2...)(值1,值2...)(值1,值2...);
- DML-修改数据
update 表名 set 字段名1=值1,字段2=值2,...[where 条件];
- DML-删除数据
delete from 表名 [where 条件];
*DQL数据查询语句
select 4
字段列表
from 1
表名列表
where 2
条件列表
group by 3
分组字段列表
having 3
分组后条件列表
order by 5
排序字段列表
limit 6
分页参数
- 基本查询
--查询多个字段
select 字段1,字段2,字段3...from 表名;
select * from 表名;
--设置别名
select 字段1[as 别名1]...;
--去除重复记录
select distinct 字段列表 from 表名;
- 条件查询
select 字段列表 from 表名 where 条件列表;
-
聚合函数
-
将一列数据作为一个整体,进行纵向计算
-
常见聚合函数
-
select 聚合函数(字段列表) from 表名;
-
分组查询
select 字段列表 from 表名[where 条件]group by 分组字段名[having 分组后过滤条件];
-
where和having的区别
-
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组后对结果进行过滤
-
判断条件不同:where不能对聚合函数进行判断,而having可以
-
- 排序查询
Select 字段列表 from 表名 order by 字段1 排序方式1...;
/*
ASC:升序(默认)
DESC:降序
*/
- 分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;
起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数
DCL数据控制语句
用来管理数据库 用户,控制数据库的 访问权限
- DCL-管理用户
--查询用户
use mysql;
select *from user;
--创建用户
create user '用户名'@'主机名' identified by '密码';
--修改用户名
alter user '用户名'@'主机名' identified with ;mysql_native_password by '新密码';
--删除用户
drop user '用户名'@'主机名';
-
DCL-管理权限
--查询权限
show grants for '用户名'@'主机名';
--授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
--撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';