MySQL常用语句(CURD)

article/2025/9/26 10:09:48

文章目录

  • 一、数据库定义语言(DDL)
    • 1.1 库操作
    • 1.2 表操作
  • 二、数据库操纵语言(DML)
    • 2.1 插入 insert
    • 2.2 修改 update
    • 2.3 删除 delete
  • 三、数据库查询语言(DQL)
    • 3.1 单表查询
      • ①查询:select
      • ②条件:where
      • ③去重:distinct
      • ④排序:order by
      • ⑤分页:limit
    • 3.2 聚合查询
      • ①聚合函数
      • ②group by 分组
      • ③having 过滤
    • 3.3 联表查询
      • ①内连接
      • ②外连接
      • ③自连接
      • ④子查询
      • ⑤合并查询
  • 四、数据库控制语言(DCL)


提示:以下是本篇文章正文内容,MySQL 系列学习将会持续更新

一、数据库定义语言(DDL)

1.1 库操作

-- 建库
create database test1;
create database test2 default charset utf8mb4;-- 展示所有库
show databases;-- 设置默认库,表示之后的操作都是对该库进行的
use test1;-- 删库
drop datebase test2;

1.2 表操作

列级约束:主键 Primary key、外键 foreign key 、唯一 unique、默认值 default 、非空/空值 not null/ null、自增 auto_increment

①创建表:

create table 表名(列名 数据类型 [列级约束条件],列名 数据类型 [列级约束条件],...列名 数据类型 [列级约束条件]);create table user (uid int primary key not null auto_increment,name varchar(10) not null,sex enum('男','女') not null default '男'
);

②修改表:

alter table 表名 [add column 新列名 数据类型[列级约束条件]],[drop column 列名[restrict|cascade]],[change column 原列名 新列名 数据类型[列级约束条件]];alter table `test`.`user` add column `age` INT NOT NULL after `sex`,change column `name` `name` VARCHAR(20) NOT NULL ;

我们可以通过 ADD 来添加一个新的列,通过 DROP 来删除一个列,不过我们可以添加 restrictcascade,默认是 restrict,表示如果此列作为其他表的约束或视图引用到此列时,将无法删除,而 cascade 会强制连带引用此列的约束、视图一起删除。还可以通过 ALTER 来修改此列的属性。

③删除表:

-- 展示默认库的所有表名称
show tables;-- 删表
DROP TABLE 表名 [restrict|cascade];-- 清空表数据(截断)
truncate table student;

回到目录…

二、数据库操纵语言(DML)

2.1 插入 insert

①单行+全列插入

insert into student values (100, 10000, ‘唐三藏’, NULL);
insert into student values (101, 10001, ‘孙悟空’, 12345);

②多行+指定列插入

insert into student (id, sn, name) values(102, 20001, ‘刘大耳’),(103, 20002, ‘曹阿瞒’),(104, 20003, ‘孙仲谋’);

2.2 修改 update

UPDATE 表名 SET 列名=,... WHERE 条件;

示例:

-- 修改曹孟德的数学成绩为80分,语文成绩为90分
update student set math = 80, chinese = 90 where name = ‘曹孟德’;-- 将总分倒数三名同学的数学成绩加上20分  (支持limit,不支持offset)
update student set math = math + 80 order by Chinese + math + english limit 3;-- 将所有同学的语文成绩更新为2倍
update student set chinese = chinese * 2;

2.3 删除 delete

DELETE FROM 表名 WHERE 条件;

示例:

-- 删除孙悟空的信息
delete from student where name = ‘孙悟空’;-- 仅删除表的全部数据 for-each
delete from student;

回到目录…

三、数据库查询语言(DQL)

3.1 单表查询

单表查询是最简单的一种查询,我们只需要在一张表中去查找数据即可,通过使用 select 语句来进行。

①查询:select

-- 全表查询,不建议使用
select * from student;
-- 指定列查询
select id, name, english from student;-- 结果集为表达式
select id, name, (chinese + math + english) / 3 from student;
-- 自定义结果集的列名
select id, name, chinese + math + english 总分 from student;

②条件:where

-- 查询english成绩高于60分的学生
select * from student where english > 60;-- and与or
select * from student where english > 60 and math > 60;
select * from student where english > 90 or math > 90;-- 范围查询
select * from student where english between 80 and 100;-- in查询
select * from student where math in (80, 85, 90, 95, 100);-- 模糊查询
-- %匹配任意多个(包括0个)字符
select name from student where name like ‘孙%;
select name from student where name like%孙’;
select name from student where name like%%;
-- _严格匹配一个任意字符
select name from student where name like ‘孙_’;-- NULL查询
select * from student where qq_mail is not null;
select * from student where qq_mail is null;
比较运算符说明
>,<,>=,<=,=,!=和 Java 中一样
between a and b范围匹配 [a,b],返回TRUE
in (option, …)如果是 option 中的任意一个,返回 TRUE
is null,is not null是否为 NULL
like模糊匹配,如 like ‘孙%’ 或 like ‘孙_’
逻辑运算符说明
and条件都满足,取true
or满足其中一个条件,取true

回到目录…

③去重:distinct

-- 可以列出所有不重复的math成绩集合
select distinct math from student;-- 此时就没有去重功能了,因为没有id和math同时重复的学生
select distinct id, math from student;

④排序:order by

  • asc:升序,默认值;desc:降序
  • NULL 视为比任何数据都小
-- 先优先 math 升序;若 math 相等,则按 Chinese 降序;若都相等,按 id 升序
select * from student order by math asc, chinese desc, id;
-- 使用表达式 + 别名排序
select  name, math + chinese + english 总分 from student order by 总分;

⑤分页:limit

-- 从下标0开始,筛选5条结果
select * from student limit 5;
-- 从下标2开始,筛选5条结果
select * from student limit 2, 5;
-- 筛选5条结果,从下标2开始。这种写法意思更明确
select * from student limit 5 offset 2;-- 综合运用
-- 查询数学成绩高于80分,且排名前三的学生
select name, math from student where math > 80 order by math desc limit 3;

回到目录…

3.2 聚合查询

①聚合函数

  • count(*):统计所有的行数
  • count(列名):统计某列的值总和
  • sum(列名):求一列的和
  • avg(列名):求一列的平均值
  • max(列名):求一列的最大值
  • min(列名):求一列的最小值
-- 统计数据的数量
select count(*) from student;
-- 统计邮箱的个数,qq_mail为null不计入结果
select count(qq_mail) from student;-- 统计所有学生的数学总分
select sum(math) from student;-- 统计班级数学平均分
select avg(math) from student;-- 统计班级数学最高分
select max(math) from student;-- 统计班级数学最低分
select min(math) from student;

②group by 分组

通过使用 group by 来对查询结果进行分组,它需要结合聚合函数一起使用:

SELECT sum(*) FROM 表名 WHERE 条件 GROUP BY 列名;

示例:

-- 查询每种角色的最高工资、最低工资、平均工资
select role, max(salary), min(salary), avg(salary) from emp group by role;-- 统计每种角色薪资高于500的人数
select role, count(*) from emp where salary > 500 group by role;-- 多聚合,在不同列的组合下进行聚合查询
select company, role, count(*) from emp2 group by company, role;

③having 过滤

我们还可以添加 having 来限制分组条件:

-- having关键字用于聚合之后进行过滤操作
select role, avg(salary) from emp group by role having avg(salary) > 300;

注意顺序:where > group by > having

emp 表:
在这里插入图片描述

回到目录…

3.3 联表查询

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积。

两张表:
在这里插入图片描述

①内连接

在这里插入图片描述

select 字段 from1 inner join2 on 连接条件 where 其他条件; 

示例:

-- inner 可以省略
select * from users join articles on uid = author_id where users.name = '小红';-- 查询作者对应的书籍
select name, title from users inner join articles on users.uid = articles.author_id;	

内连查询结果:
在这里插入图片描述

回到目录…

②外连接

在这里插入图片描述

-- 左外连接
select 字段名 from 表名1 left join 表名2 on 连接条件;-- 右外连接
select 字段名 from 表名1 right join 表名2 on 连接条件;

左外连查询结果:
在这里插入图片描述
右外连查询结果:
在这里插入图片描述

回到目录…

③自连接

自连接是指在同一张表连接自身进行查询。
在这里插入图片描述

查询所有 “Java” 成绩比 “计算机原理” 成绩低的信息:

SELECT s1.sid, s1.score, s2.score 
FROM score s1 JOIN score s2 
ON s1.sid = s2.sid  -- 指向同一个学生
AND s1.cid = 1  -- 表1指向Java成绩
AND s2.cid = 3  -- 表2指向计算机原理成绩
AND s1.score < s2.score; -- Java < 计算机原理

查询结果:
在这里插入图片描述

回到目录…

④子查询

在这里插入图片描述
案例:查询所有同学的 ‘计算机原理’ 成绩

-- 使用IN
select sid, score from score where cid in (select cid from course where c_name='计算机原理');-- select * from 表名 where exists(子查询);
-- 如果子查询没有返回结果,则不执行外层的 sql
select sid, score from score where exists (select cid from course where c_name='计算机原理' and score.cid=course.cid);

查询结果:
在这里插入图片描述

回到目录…

⑤合并查询

在实际应用中,为了合并多个select的执行结果,可以使用 unionunion all 时,前后查询的结果集中,字段需要一致。

案例:查询 sid < 5 或者 age > 18 的同学。

其实直接用 or 就可以实现:

select * from student where sid<5 or age>18;
-- union: 该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。 
select * from student where sid<5 
union 
select * from student where age>18;-- union all: 和 union 几乎一样。但当使用该操作符时,不会去掉结果集中的重复行。 
select * from student where sid<5 
union all 
select * from student where age>18;

回到目录…

四、数据库控制语言(DCL)

庞大的数据库不可能由一个人来管理,我们需要更多的用户来一起管理整个数据库。可参考文章:MySQL之用户及权限操作

①创建用户

-- 用户名: test, 密码: 123456, 可访问主机: %任意主机
create user 'test'@'%' identified by '123456';

②授权

-- 给该用户赋予对所有库表的所有操作权限
grant all on *.* to 'test'@'%';-- 撤销所有权限
revoke all on *.* from 'test'@'%';-- 刷新系统权限表
flush privileges;

回到目录…


总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是MySQL的学习,我们学习整理了MySQL常用语句:基础的CURD操作和高阶的聚合查询和联表查询。之后的学习内容将持续更新!!!


http://chatgpt.dhexx.cn/article/5UbQfoAh.shtml

相关文章

SpringBoot实现CURD

SpringBoot实现CURD 项目列表 Pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:/…

thinkphp curd 列表关联展现方式分享

在维护自己的开源框架中&#xff0c;针对后台列表模板&#xff0c;有时候我们需要在一键CURD的情况下&#xff0c;进行多个字段的关联显示&#xff0c;比如用户订单表里面存在user_id字段&#xff0c;那么在显示的时候&#xff0c;我们期望显示出用户的名称&#xff0c;而不是用…

mysql curd_mysql 基础之CURD

原文:mysql 基础之CURD 增删改查基本语法学习 增: insert Insert 3问: 1: 插入哪张表? 2: 插入哪几列? 3: 这几列分别插入什么值? Insert into TableName (列1,列2....列n) Values (值1,值2,....值n) 值 与 列,按顺序,一一对应 特殊: insert语句 允不允许不写列名 答:允许. …

小白入门:什么是CURD?

CRUD是CREATE、READ、UPDATE和DELETE的首字母缩写词&#xff0c;在数据库操作中频繁出现&#xff0c;本文针对小白&#xff0c;如果你已经是开发人员或者对数据库有一定认识的工程师可以默默离开了。让我直接走进CURD的世界。 为什么 CRUD 如此重要&#xff1f; CRUD 经常用于…

大龄焦虑?如何看待程序员35岁职业危机?

往期精选&#xff08;欢迎转发~~&#xff09; Java全套学习资料&#xff08;14W字&#xff09;&#xff0c;耗时半年整理 消息队列&#xff1a;从选型到原理&#xff0c;一文带你全部掌握 肝了一个月的ETCD&#xff0c;从Raft原理到实践 我肝了三个月&#xff0c;为你写出了…

Sitemesh前段框架基础

用sitemesh框架解决项目统一布局的解决方案 Sitemesh装饰框架 Sitemesh项目简介&#xff1a; Sitemesh是一个用来在jsp中实现页面布局和装饰&#xff08;layout and decoration&#xff09;的框架组件&#xff0c;能够帮助网站开发人员较容易实现页面中动态和静态装饰外观的分…

Sitemesh Demo

简介 sitemesh是一个网页布局与装饰体系,主要应用于创建具有大量一致性用户界面、导航与布局框架的站点。sitemesh拦截一切经过web server的静态或动态生成的HTML页面请求,处理页面内容,并将其与一个或多个装饰页面进行融合,生成最终页面。sitemesh也可用于构建由多个部分小…

spring集成sitemesh3

1、SiteMesh是什么&#xff1f; SiteMesh是一个网页布局和修饰的框架&#xff0c;利用它可以将网页的内容和页面结构分离&#xff0c;以达到页面结构共享的目的。 SiteMesh是基于Servlet的filter&#xff0c;通过截取response&#xff0c;并进行装饰后再交付给客户。 2、SiteMe…

sitemesh框架的简单使用(springboot+maven+jsp+sitemesh)

一 简单介绍 sitemesh是一种模板框架&#xff0c;是为了解决页面重复代码而设计的sitemesh的设计思想是装饰者设计模式 二 简单使用 目录结构&#xff0c;因为我这个项目本来是用来学习flowable的&#xff0c;后面为了方便快速学习&#xff0c;直接把sitemesh集成到这里了&a…

SiteMesh3简介及使用

最近项目用到SiteMesh3&#xff0c;研究学习一段时间后决定写篇博文来记录收获。 SiteMesh SiteMesh 介绍工作原理配置及使用 下载1添加maven依赖2webxml中添加SiteMesh过滤器3创建一个装饰页面decorator page4创建一个被装饰页面content page5配置 1XML方式1Java方式 6查看…

sitemesh初步

sitemesh小项目 1.工程目录 2.需要的lib:sitemesh-2.4.2.jar http://wiki.sitemesh.org/wiki/display/sitemesh/Download 3.配置 decorators.xml[sitemesh的配置文件] <?xml version"1.0" encoding"ISO-8859-1"?><!-- 在defaultdir目录…

SiteMesh框架统一布局用法介绍

SiteMesh 是一个网页布局和修饰的框架&#xff0c;基于 Servlet 中的 Filter&#xff0c;类似于 ASP.NET 中的‘母版页’技术。 介绍&#xff1a; 1&#xff0c;SiteMesh是OpenSymphony团队开发的JEE框架之一,它是一个非常优秀的页面装饰器框架。它通过对所有的用户请求进行过…

SIteMesh介绍

转自:http://javauu.com/thread-27-1-1.html 一、SIteMesh介绍 一、SiteMesh简介 SiteMesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观&#xff0c;如一致的导航条&#xff0c;一致的banner&a…

【CSRF】学习关于CSRF攻击和防范

文章目录 1.CSRF攻击是什么2.CSRF攻击如何实现2.1 使用GET请求的CSRF的攻击例子2.2 使用post请求的CSRF攻击 3.如何防御CSRF攻击3.1 什么是CSRF令牌3.2 反-CSRF令牌工作流程3.3 同站Cookie策略 4.结论 高质量原文&#xff1a; CSRF Attacks: Anatomy, Prevention, and XSRF To…

CSRF攻击简述

一.CSRF是什么&#xff1f; CSRF&#xff08;Cross-site request forgery&#xff09;&#xff0c;中文名称&#xff1a;跨站请求伪造&#xff0c;也被称为&#xff1a;one click attack/session riding&#xff0c;缩写为&#xff1a;CSRF/XSRF。 二.CSRF可以做什么&#xff…

如何防止CSRF攻击?

文章目录 一、什么是CSRF&#xff1f;二、CSRF的几种类型1、GET类型的CSRF2、POST类型的CSRF3、链接类型的CSRF 三、CSRF的特点四、防护策略1、同源检测如何阻止外域请求无法确认来源域名情况 2、CSRF Token原理1&#xff09;将CSRF Token输出到页面中2&#xff09;页面提交的请…

CSRF攻击原理以及防御方法

CSRF攻击原理以及防御方法 CSRF概念&#xff1a;CSRF跨站点请求伪造(Cross—Site Request Forgery)&#xff0c;跟XSS攻击一样&#xff0c;存在巨大的危害性&#xff0c;你可以这样来理解&#xff1a; 攻击者盗用了你的身份&#xff0c;以你的名义发送恶意请求&#xff0c;对服…

csrf攻击 java_Web常见攻击手段-CSRF攻击

什么是CSRF攻击&#xff1f; 跨站请求伪造(Cross-Site Request Forgery, CSRF)&#xff0c;恶意网站通过脚本向当前用户浏览器打开的其它页面的 URL 发起恶意请求&#xff0c;由于同一浏览器进程下 Cookie 可见性&#xff0c;导致用户身份被盗用&#xff0c;完成恶意网站脚本中…

什么是CSRF攻击?

什么是 CSRF 攻击&#xff1f; CSRF 概念&#xff1a;CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为“One Click Attack”或者 Session Riding&#xff0c;通常缩写为 CSRF 或者 XSRF&#xff0c;是一种对网站的恶意利 用。 尽…

【Web 安全】CSRF 攻击详解

文章目录 一、CSRF 简介二、CSRF 原理三、CSRF 的危害四、CSRF 的攻击类型1. GET型2. POST型 五、CSRF 的防御1. 验证 HTTP Referer 字段2. 在请求地址中添加 token 并验证3. 在 HTTP 头中自定义属性并验证 六、WAF 防御 CSRF参考链接 一、CSRF 简介 CSRF&#xff08;Cross Si…