当前位置: 首页 > news >正文

【MySQL】SQL的分类

目录

    • SQL分类
      • DDL
        • DDL 数据库操作
        • DDL 表操作
      • DML
        • 添加数据
        • 修改数据
        • 删除数据
      • DQL
        • 基本查询
        • 条件查询
        • 聚合函数
        • 分组查询
        • 排序查询
        • 分页查询
        • 执行顺序
      • DCL
        • 管理用户
        • 权限控制

SQL分类

分类全称说明
DDLData Definition Language数据定义语言,用来定义数据库对象(数据库,表,字段)
DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言,用来查询数据库中表的记录
DCLData Control Language数据控制语言,用来创建数据库用户,控制数据库的访问权限

DDL

DDL 数据库操作

查询

查询所有数据库

SHOW DATABASES;

查询当前数据库

select database();

创建

create database [if not exists] 数据库名 [default charset 字符集] [ collate 排序规则];

在这里插入图片描述
这里的utf8mb4支持4个字节的Unicode字符,覆盖了所有Unicode字符(包括emoji、特殊符号等),是MySQL推荐的字符集,完全兼容utf8(即utf8mb3),mb4表示max bytes 是4

删除

drop database [ if exists ] 数据库名;

使用

use 数据库名
DDL 表操作

查询当前数据库所有表

show tables;

查询表结构

desc 表名

查询指定表的建表语句

show create table 表名

创建

create table 表名(字段1 类型[comment 注释]...字段n 类型[comment 注释]
)[comment 表注释];
create table tb_user(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender varchar(1) comment '性别'
) comment '用户表';

在这里插入图片描述

数据类型

MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型

在这里插入图片描述

在这里插入图片描述

char(10)和varcahr(10)区别
char(10):尽管只存储一个字符,也会占用10个字符的空间,未占用的空间会用空格补充
性能高

varchar(10):存储几个字符就占用几个字符空间
由于varchar在使用时会计算占用的空间,性能较差

用户名 username varchar(50)
性别 gender char(1)

在这里插入图片描述

设计一张员工信息表,要求如下:

在这里插入图片描述

create table emp_info(
id int comment '编号',
emp_no varchar(10) comment '员工工号',
emp_name varchar(10) comment '员工姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
hiredate date comment '入职日期'
)comment '员工信息表'
;

修改

添加字段

alter table 表名 add 字段名 类型(长度) [comment 注释][约束]

修改数据类型

alter table 表名 modify 字段名 新数据类型(长度)

修改字段名和字段类型

alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释][约束];

在这里插入图片描述

在这里插入图片描述

删除字段

alter table 表名 drop 字段名

修改表名

alter table 表名 rename to 新表名

在这里插入图片描述

删除表

drop table [if exists] 表名;

在这里插入图片描述

删除指定表,并重新创建该表

truncate table 表名

在这里插入图片描述

注意:在删除表时,表中的全部数据也会被删除

总结:

在这里插入图片描述

DDL语句是用来操作数据库表结构表中字段的

DML

用来完成数据的增删改

DML英文全称是Data Manipulation Lanuage(数据操作语言),用来对数据库中表的数据记录进行增删改操作

添加数据(INSERT)
修改数据(UPDATE)
删除数据(DELETE)

添加数据

给指定字段添加数据

insert into 表名(字段名1,字段名2...) values  (1,2,...);

给全部字段添加数据

insert into 表名 values (1,值2,..);

批量添加数据

insert into 表名(字段名1,字段名2...) values (值1,值2...,(1,2,...)insert into 表名 values (1,值2...),(1,值2,...)

注意:

插入数据时,指定的字段顺序需要与值得顺序是一一对应得
字符串和日期型数据应该包含在引号中
插入数据大小,应该在字段的规定范围内

修改数据
update 表名 set 字段名1 =1,字段名2 =2....[WHERE 条件]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

删除数据
delete from 表名 [ where 条件 ]

注意:

  • delete 语句的条件可以有,也可以没有,如果没有,则会删除整张表的所有数据
  • delete 语句不能删除某一个字段的值(可以使用update)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

DQL

DQL英文全称是Data Query Language ,数据查询语言,用来查询数据库中表的记录

查询关键字:SELECT

select 字段列表
from 表名列表
where 条件列表
group by 分组字段列表
having分组后条件列表
order by 排序字段列表
limit分页参数
基本查询

查询多个字段

select 字段1,字段2,字段3... from 表名;select * from 表名;

设置别名

select 字段1 [as 别名1],字段2 [as 别名2] ... from 表名;

去除重复记录

select distinct 字段列表 from 表名;

测试代码如下:

create table emp(
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
workaddress varchar(50) comment '工作地址',
entrydate date comment '入职时间'
) comment '员工表';insert into emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
values (1, '1', '柳岩', '女', 20, '123456789012345678', '北京', '2000-01-01'),(2, '2', '张无忌', '男', 18, '123456789012345670', '北京', '2005-09-01'),(3, '3', '韦一笑', '男', 38, '123456789712345670', '上海', '2005-08-01'),(4, '4', '赵敏', '女', 18, '123456757123845670', '北京', '2009-12-01'),(5, '5', '小昭', '女', 16, '123456769012345678', '上海', '2007-07-01'),(6, '6', '杨逍', '男', 28, '12345678931234567X', '北京', '2006-01-01'),(7, '7', '范瑶', '男', 40, '123456789212345670', '北京', '2005-05-01'),(8, '8', '黛绮丝', '女', 38, '123456157123645670', '天津', '2015-05-01'),(9, '9', '范凉凉', '女', 45, '123156789012345678', '北京', '2010-04-01'),(10, '10', '陈友谅', '男', 53, '123456789012345670', '上海', '2011-01-01'),(11, '11', '张士诚', '男', 55, '123567897123465670', '江苏', '2015-05-01'),(12, '12', '常遇春', '男', 32, '123446757152345670', '北京', '2004-02-01'),(13, '13', '张三丰', '男', 88, '123656789012345678', '江苏', '2020-11-01'),(14, '14', '灭绝', '女', 65, '123456719012345670', '西安', '2019-05-01'),(15, '15', '胡青牛', '男', 70, '12345674971234567X', '西安', '2018-04-01'),(16, '16', '周芷若', '女', 18, null, '北京', '2012-06-01');

查询所有字段返回

select id, workno, name, gender, age, idcard, workaddress, entrydate from emp;

在这里插入图片描述

或者

select * from emp;

注意:

在实际的开发环境中,尽量不要写*,写*不直观,而且会影响效率

数据库可以根据查询语句中的字段来使用合适的索引以加快查询速度。使用 select * 时,数据库很难精准优化查询,可能无法充分利用索引。例如,在一个包含多个字段的表中,仅对 id 和 name 字段建立了联合索引,当使用 select * 查询时,数据库可能无法直接利用该索引,导致查询效率降低。

条件查询
select 字段列表 from 表名 where 条件列表

条件

在这里插入图片描述

在这里插入图片描述

查询年龄等于18或20或40的员工信息

在这里插入图片描述

在这里插入图片描述

查询姓名为两个字的员工信息

在这里插入图片描述

在这里插入图片描述

查看身份证号最后一位是X的员工信息

在这里插入图片描述

在这里插入图片描述

聚合函数

count、max、min、avg、sum

将一列数据作为一个整体,进行纵向计算

select 聚合函数(字段列表) from 表名

注意:null 值不参与所有聚合函数运算

在这里插入图片描述
该行数据的idcard为null,使用count(idcard)进行统计时,该行不参与统计

在这里插入图片描述

分组查询
select 字段列表 from 表名 [where 条件] group by 分组字段名 [ having 分组后过滤条件];

where 与 having区别

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤
  • 判断条件不同:where不能对聚合函数进行判断,而having可以

根据性别分组,统计男性员工和女性员工的数量

select gender,count(*) from emp group by gender;

在这里插入图片描述

查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址

select workaddress,count(*) address_count from emp where age < 45 group by workaddress having address_count > 3;

注意:
执行顺序:where > 聚合函数 > having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

排序查询
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;

排序方式

ASC:升序(默认值)
DESC:降序

注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;

注意:

起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数

分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT

如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10

查询第2页员工数据,每页展示10条记录

在这里插入图片描述

这里 limit 后面的第一个10表示起始索引,由于是第二页,每页查询的记录是10,所以起始索引为:(2-1) * 10 = 10

查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工

在这里插入图片描述

执行顺序

编写顺序如下:

select 字段列表
from 表名列表
where条件列表
group by分组字段列表
having分组后条件列表
order by 排序字段列表
limit 分页参数

执行顺序如下:

from表名列表
where条件列表
group by 分组字段列表
having分组后条件列表
select字段列表
order by 排序字段列表
limit分页参数

DCL

DCL英文全称是Data Control Language (数据控制语言)
用来管理数据库用户,控制数据库的访问权限
控制哪些用户可以访问数据库服务器,以及控制用户可以操作哪几个数据库

管理用户

查询用户

use mysql;
select * from user;

在这里插入图片描述

在mysql中用户的信息,用户所具有的权限的信息

创建用户

create user '用户名'@'主机名' identified by '密码';

主机名指的是在哪一个主机上,这个用户可以访问mysql

在这里插入图片描述

查看创建后用户

在这里插入图片描述

此时只能在当前主机进行访问

在这里插入图片描述
此时可通过任意主机进行访问

修改用户密码

alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';

在这里插入图片描述

删除用户

drop user '用户名'@'主机名'

在这里插入图片描述

注意:
主机名可以使用%通配
这类SQL开发人员操作的比较少,主要是DBA(Database Administrator)使用

权限控制

mysql中定义了很多种权限,但是常用的就以下几种

在这里插入图片描述

查询权限

show grants for '用户名'@'主机名'

在这里插入图片描述

USAGE 是 MySQL 中的一种特殊 “权限”,表示 “无实际操作权限”(仅允许登录,不能查询、修改数据或执行其他操作)。它本质上是一种 “占位符权限”,用于在不授予具体权限的情况下创建用户。

授予权限

grant 权限列表 on 数据库.表名 TO '用户名'@'主机名'

在这里插入图片描述

'henry‘@’%‘对于stu数据库下所有表授予所有权限

在这里插入图片描述
'henry'@'%'所有数据库中所有表授予所有权限

撤销权限

revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名'

在这里插入图片描述

注意:
多个权限之间,使用逗号分隔
授权时,数据库名和表名可以使用*进行通配,代表所有

http://www.dtcms.com/a/449134.html

相关文章:

  • Flutter GridView 使用指南
  • day86——有效的字母异位词(LeetCode-242)
  • 企业的网站建设费用重庆seo什么意思
  • 网站搭建介绍网站建设的原因
  • 怎么建免费网站建设公司网站新闻宣传管理制度
  • Deep Code Research:当 Deep Research 遇上 ABCoder
  • JavaEE初阶——中秋特辑:网络编程送祝福从 Socket 基础到 TCP/UDP 实战
  • 多模卫星导航定位与应用-原理与实践(RTKLib)3
  • 数字婵娟:一部关于中秋节的计算主义宣言
  • ED2K技术
  • 【数据结构】顺序表0基础知识讲解 + 实战演练
  • GPU即服务:Linux与云原生如何联手开启AI算力“自来水“时代
  • 【数据结构】算法复杂度
  • 校园网门户网站建设招聘网站如何做
  • 深度学习(十六):数据归一化处理
  • 力扣70.爬楼梯
  • 【深度学习计算机视觉】10:转置卷积
  • 电子商务网站策划素材网站 模板
  • Coze源码分析-资源库-编辑知识库-后端源码-安全/错误处理机制
  • 【无标题】标签单击事件
  • GAMES101:现代计算机图形学入门(Chapter5 光栅化1(三角形遍历))迅猛式学习笔记(附Homework 0)
  • 【Linux操作系统】进程概念
  • 【Linux】Linux进程信号(上)
  • 海思SS528/22AP30开发笔记之环境搭建和SDK编译
  • 算法二分法详解
  • 信号 | 基本描述 / 分类 / 运算
  • 【环境配置 升级gcc】RK3588 Ubuntu20.04 gcc9升级为gcc10
  • 资产信息收集与指纹识别:HTTPX联动工具实战指南
  • 鼠标消息超时处理——实现图形界面自动操作,避免鼠标消息阻塞
  • 用AI帮忙,开发刷题小程序:微信小程序在线答题系统架构解析