【MySQL学习】关系数据库标准语言SQL
目录
定义
分类
DDL
数据库操作
查询
创建
删除
使用
数据库中的表操作
查询
创建
修改
删除
数据类型
数值类型
字符串类型
日期时间类型
DML
添加数据
修改数据
DQL
基本查询
条件查询
聚合函数
分组查询
排序查询
分页查询
DCL
管理用户
权限控制
定义
SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准语言。
分类
DDL
数据定义语言,用来操作数据库、表、列等。
数据库操作
查询
查询所有数据库
show databases;
查询当前数据库
select database();
创建
create database [if not exists] 数据库名 [ default charset 字符集] [collate 排序规则];
删除
drop database [if exists] 数据库名;
使用
use 数据库名;
数据库中的表操作
ps.以下操作针对的是数据库中的表
查询
查询当前数据库所有表
show tables;
查询表结构
desc 表名;
查询指定表的建表语句
show create table 表名;
创建
create table 表名(
字段1 字段1类型 COMMENT '字段1注释',
字段2 字段2类型 COMMENT '字段2注释',
...........
字段n 字段n类型 COMMENT '字段n注释'
)COMMENT='表注释';
注:最后一个字段后面没有逗号
修改
添加字段
alter table 表名 add 字段名 类型(长度)[comment 注释] [约束];
修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度)[comment 注释] [约束];
修改表名
alter table 表名 rename to 新表名;
删除
删除字段
alter table 表名 drop 字段名;
删除表
drop table [if exists] 表名;
删除指定表,并重新创建该表
truncate table 表名;
注:在删除表时,表中的全部数据也会被删除。
数据类型
数值类型
字符串类型
CHAR :定长字符串
VARCHAR:变长字符串
注意:当数据为CHAR(M)类型时,不管插入值的长度,它的占用空间都是M个字节
而VACHAR(M)所对应的数据所占用字节数为实际长度加1
日期时间类型
DML
对数据库中表的数据记录进行增删改操作
添加数据
给指定字段添加数据
insert into 表名(字段1,字段2,......) values(值1,值2.....);
给全部字段添加数据
insert into 表名 values(值1,值2,.....);
批量添加数据
insert into 表名(字段名1,字段名2,.....) values(值1,值2.....)(值1,值2,....)(值1,值2.....);
注:1)插入数据时,指定字段顺序要与值的顺序一一对应
2) 字符串和日期型数据应该包含在引号中
3)插入的数据大小,应该在字段的规定范围内
修改数据
uodate 表名 set 字段1=值1,字段2=值2,.....[where 条件];
注:没有条件的话会修改整张表的所有数据
DQL
查询数据库中表的记录
语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段列表
having
分组后条件列表
order by
排序字段列表
limit
分页参数
基本查询
查询多个字段
select 字段1,字段2,字段3..... from 表名;
设置别名
select 字段1 [as 别名1],字段2 [as 别名2]...... from 表名;
去除重复记录
select distinct 字段列表 from 表名;
扩展:
在select子句中,可以
1)选择现有列:直接指定想要查看的表中的列名
2)创建计算列:使用表中一个或多个列的数据进行计算,并将结果作为一个新列放回
3) 使用内置函数:如year(),count()等,对表中的数据进行处理
条件查询
语法
select 字段列表 from 表名 where 条件列表;
条件
1)between....and...
2)in(......) 在in之后的列表中的值,多选一
3)like '<匹配串>' 其中匹配串可以是完整字符串,也可以含%(代表任意长度)或_(代表单个字符)
4).......is null 是NULL
5)or
6)and
聚合函数
将一列数据作为一个整体,进行纵向计算
常见:count,max,min,avg,sum
语法
select 聚合函数(字段列表) from 表名;
注:null值不参与计算
分组查询
语法
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]
注:
where和having的区别
1)执行时机不同
where是分组之前进行过滤,不满足where条件,不参与分组;
而having是分组之后对结果进行过滤
2)判断条件不同
where 不能对聚合函数进行判断,而having可以
执行顺序:where >聚合函数>having
排序查询
select 字段列表 from 表名 order by 字段1 排序方式1,字段2,排序方式2;
ASC :升序(默认值)
DESC:降序
注:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;
注:
1)起始索引从0开始
2)如果要从第一项开始查询,可以省略起始索引
DCL
数据控制语言,用来管理数据库用户、控制数据库的访问权限
管理用户
查询用户
use mysql;
select * from user;
创建用户
create user '用户名'@'主机名' identified by '密码';
修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
删除用户
drop user '用户名'@'主机名';
注:主机名可以用 % 通配
权限控制
常用权限:
权限 | 说明 |
all | 所有权限 |
select | 查询数据 |
insert | 插入数据 |
update | 修改数据 |
delete | 删除数据 |
alter | 修改表 |
drop | 删除数据库/表/视图 |
查询权限
show grants for '用户名'@'主机名';
授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';