SQL语句可以单行或多行书写,以分号(“;”)结尾。
SQL语句可以使用空格或缩进增强可读性。
MySQL数据库的SQL语句不区分大小写(建议关键字大写)。
注释
单行注释:
-- 内容
# 内容(MySQL特有)
多行注释:
/* 内容 */
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用于定于数据库对象(数据库、表、字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中数据进行增加、删除、修改 |
DQL | Data Query Language | 数据查询语言,用于查询数据库表中的记录 |
DCL | Data Control Language | 数据控制语言,用于创建数据库、操控数据库的访问权限 |
查询:
查询所有数据库:
show databases;
查询当前数据库:
select database();
创建:
create database [if not exists] 数据库名称 [default charset 字符集] [collate 排序规则];
(PS:方括号("[]")内的为可选项;字符集推荐使用utf8mb4;)
(意义:[if not exists]意义为若数据库内已存在该名称的数据库则不执行;)
删除:
drop database [if exists] 数据库名称;
(PS:方括号("[]")内的为可选项;)
(意义:[if exists]意义为若数据库存在则执行删除;)
使用:
use 数据库名称;
查询当前数据库所以的表:
show table;
查询表结构:
desc 表名;
查询指定表的建表语句:
show create table 表名;
<数据库操作(DDL)- 创建 - 数据库:tb_user>
create table 表名( 字段1 字段1的类型 [comment 字段1注释], 字段2 字段2的类型 [comment 字段2注释], 字段3 字段3的类型 [comment 字段3注释] ) [comment 表注释]
(PS:方括号("[]")内的为可选项;)
<数据库操作(DDL)- 数据类型 - 案例:08案例.txt>
MySQL主要数据库类型:
数值类型:
(PS:DOUBLE需要设置精度、标度;)
(意义:精度意义为数值总长度;标度意义为小数点位数;)
(案例:[字段名 TINYINT UNSIGNED] 意义为当前使用的TINYINT数据类型使用的是无符号的;)
字符串类型:
(PS:带BLOB的为二进制存储数据类型;CHAR类型若存储没有达到设定的长度则会用空格填充;VARCHARA类型为所占用的长度则为所占用的空间;)
(案例:[char(10)] 意义为最大长度为10的字符;)
日期时间类型:
添加字段:
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束]
(PS:方括号("[]")内的为可选项;)
修改数据类型:
alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和字段类型:
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
(PS:方括号("[]")内的为可选项;)
删除字段:
alter table 表名 drop 字段名;
修改表名:
alter table 表名 rename to 新表名;
删除表:
drop table [if exists] 表名;
(PS:方括号("[]")内的为可选项;)
(意义:[if exists]意义为若数据库存在则执行删除;)
删除指定表,并重新创建该表:
truncate table 表名;
给指定字段添加数据:
insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);
给全部字段添加数据:
insert into 表名 values(值1,值2,值3);
批量给指定字段添加数据:
insert into 表名(字段1,字段2) values(值1,值2),(值1,值2);
批量给全部字段添加数据:
insert into 表名 values(值1,值2),(值1,值2),(值1,值2);
(PS:添加的数据类型为字符串、日期应该包含在引号('')中;添加的字符串类型大小应该在字段规定的范围内;)
修改表的数据:
update 表名 set 字段名1 = 值1,字段名2 = 值2,字段名3 = 值3 [where 条件];
(PS:方括号("[]")内的为可选项;)
删除表的数据:
delete from 表名 [where 条件];
(PS:方括号("[]")内的为可选项;)
语法:
语法: | 解释: |
---|---|
select | 字段列表 |
from | 表名列表 |
where | 条件列表 |
group by | 分组字段列表 |
having | 分组后条件列表 |
order by | 排序字段列表 |
limit | 分页参数 |
查询多个字段:
select 字段1,字段2,字段3 from 表名;
查询所有字段:
select * from 表名;
(PS:在开发中建议不要使用星号“※”;)
设置别名:
select 字段1 as 别名1,字段2 as 别名2 from 表名;
去除重复记录:
select distinct 字段列表 from 表名;
语法:
select 字段列表 from 表名 where 条件列表;
条件:
比较运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
detween ... and ... | 在某个范围之内(最小值、最大值) |
in(...) | 在in之后的列表中的值,多选一 |
like 占位符 | 模糊匹配(“_”匹配单个字符,“%”匹配任意个字符) |
is null | 是null |
逻辑运算符 | 功能 |
---|---|
and 或 && | 并且(多个条件同时成立) |
or 或 || | 或者(多个条件任意一个成立) |
not 或 ! | 非、不是 |
介绍:
将一列数据作为一个整体,进行纵向运算。
常见的聚合函数:
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
语法:
select 聚合函数(字段列表) from 表名;
(PS:null值不参与聚合函数运算;)
语法:
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
(PS:方括号("[]")内的为可选项;)
where与having的区别:
执行时间不同:where是分组之前进行过滤(不满足条件的不参与分组),而having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
语法:
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
排序方式:
ASC:升序排序(默认值)。
DESC:降序排序。
(PS:若是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序;)
语法:
select 字段列表 from 表名 limit 起始索引,查询记录数;
(PS:起始索引从0开始;起始索引=(查询页面 - 1) * 每页显示记录数;分页查询是数据库的方言(limit是MySQL的);)
执行顺序:
执行顺序: | 语法: | 解释: |
---|---|---|
4 | select | 字段列表 |
1 | from | 表名列表 |
2 | where | 条件列表 |
3 | group by | 分组字段列表 |
5 | having | 分组后条件列表 |
5 | order by | 排序字段列表 |
6 | limit | 分页参数 |
查询用户:
use mysql;
select * from user;
创建用户:
create user '用户名'@'主机名' identified by '密码';
修改用户密码:
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
删除用户:
drop user '用户名'@'主机名';
(PS:主机名可以使用百分号"%"通配符,来表示任意主机都可以访问;)
常用的权限控制:
权限: | 说明; |
---|---|
all、all privileges | 所有权限 |
select | 查询数据 |
insert | 插入数据 |
update | 修改数据 |
delete | 删除数据 |
alter | 修改表 |
drop | 删除数据库、表、视图 |
create | 创建数据库、表 |
查询权限:
show grants for '用户名'@'主机名';
授予权限:
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
(PS:多个权限之间要使用逗号(",")分隔;)