day39_mysql

news2024/12/22 20:04:11

今日内容

0 复习昨日
1 DML
2 约束
3 DQL

0 复习昨日

1 什么是数据库(Database)? 用来组织,存储,管理数据的仓库

2 什么是数据库管理系统(Database Management System-DBMS)? 用来管理数据库的一个软件

3 数据库分类

  • 关系型数据库,Oracle,Mysql,SqlServer,DB2
  • 非关系数据库,Redis,ElasticSearch,MongoDB,HBase

4 SQL

  • DDL
  • DML
  • DQL
  • DCL

5 DDL 数据定义

  • 创建数据库 create database 库名
  • 删除库 drop database 库名
  • 创建表 …
  • 删除表 drop table 表名
  • 修改表列名 alter table 表名 change 旧列名 新列名 数据类型(长度);
  • 添加表中一列 alter table 表名 add 列名 数据类型(长度);
  • 删除表中一列 alter table 表名 drop 列名

6 DML 数据操作

  • 插入

1 DML

DML 数据操作语句

  • 插入 insert
  • 更新 update
  • 删除 delete

1.1 更新

语法

update 表名 set 字段 =[, 字段2 =2, ... ] [where 字段 =];
-- [, 字段2 = 值2, ... ] 是指,可选的,可以同时修改多个列的值
-- [where 字段 = 值] 是指,可选的,加上是指过滤,只更新符合条件的数据
--                            不加,就是更新全表数据, 不推荐!!
/*
 update 表名 set 字段 = 值;
 update 表名 set 字段 = 值 , 字段2 = 值2 ;
 update 表名 set 字段 = 值 , 字段2 = 值2 where 字段 = 值;
 推荐使用带条件的.条件有很多 = > < >= 等等
*/
-- 更新学生的id为2的成绩为100
update stu set score = 100 where sid = 2;
-- 同时更新多个字段
update stu set score = 100, birthday = '1970-01-01' where sid = 3;

-- 同时更新多条数据
update stu set score = 100 where sid >= 5;
-- 不加条件,更新全部数据
-- 不推荐使用,将来工作中数据表中的数据100w以上
update stu set score = 0;

-- 字段是可以做运算
-- 更新贝贝的年龄+2岁
update stu set age = age + 2 where sname = '贝贝';
update stu set age = age + 100;

1.2 删除

语法

delete from 表名;  -- 删除全表数据
delete from 表名 where 字段 =; -- 只删除符合条件的数据
-- 删除id为8的学生数据
delete from stu where sid = 8;

delete from stu where sid >= 5;
-- 删除全部[慎用]
delete from stu;
/*
 一般实际开发中,都是逻辑删除,其实是没有进行物理删除
执行都是更新.
 在设计表时,会设计一个状态字段,例如status
  status = 1 活跃
	status = 2 不活跃
	status = 3 僵尸号
	status = 1 用户 2 vip用户 3 注销用户
*/

1.3 delete和truncate的区别[面试问]

-- 删除全部[慎用]
delete from stu;
-- 删除全表
truncate table stu;
deletetruncate
语句类型DMLDDL
原理逐条删除数据删除表结构和数据,重建表
空间删除数据在内存中有删除后碎片很干净,没有空间碎片
效率
恢复可以恢复数据不能恢复
自增不影响自增顺序影响,从1开始

2 约束

约束,即限制,就是通过设置约束,可以限制对数据表数据的插入,删除,更新


约束设置的语法,大部分是

create table 表名(
 字段 数据类型(长度) 约束,
 字段 数据类型(长度) 约束
);

2.1 数据类型

其实数据类型也是一种约束,例如设置id列为int类型,那就不能乱给id设置字符串或者日期等数据

2.2 主键约束

主键(primary key)约束非常重要,以后开发中基本上每张表都要有主键约束,作用是设置了主键约束的列,有以下效果

  • 不能为空
  • 不能重复

一般主键是给id设置的

设置主键方式有三种:

  • 在建表时给列直接指定
  • 在建表语句的最后指定某一列是主键
  • 给以建好的表修改设置主键
  • Navicat界面操作
-- ================= 主键 ================
-- 方案1,在建表时指定
create table t1 (
	id int(11) primary key, -- 主键
	name varchar (20)
);
-- 主键不能为空,报错 Field 'id' doesn't have a default value
insert into t1 (name) values('aaa');
-- 主键不能重复,报错Duplicate entry '1' for key 'PRIMARY' 
insert into t1 (id,name) values(1,'aaa');
insert into t1 (id,name) values(1,'aaa');
-- 方案2,在建表语句的最后指定主键
create table t2 (
 id int(11),
 name varchar(20),
 age int,
 primary key(id)  -- 指定主键
);
insert into t2(name,age) values ('cc',18);
insert into t2(id,name,age) values (1,'cc',18);
insert into t2(id,name,age) values (1,'cc',18);

-- 方案3,对已建成的表设置主键
create table t3(
 id int,
 name varchar(20)
);
insert into t3(name) values ('cc');
-- 修改表,设置主键
alter table t3 add primary key (id);

2.3 自增约束

自增(auto_increment)约束,主要是配合主键使用,防止主键为空,重复

-- ================= 自增约束 ================
create table t4(
 id int(11) primary key auto_increment,
 name varchar(20)
);
insert into t4(id,name) values (1,'aaa');
-- 当没有给主键设置值是,自增会自动赋值
insert into t4(name) values ('bbb');
-- 还可以主动赋值
insert into t4(id,name) values (4,'ddd');
-- 当没有给主键设置值是,自增会自动赋值,自动根据上个id自增1
insert into t4(name) values ('eee');
delete from t4 where id = 5;
-- 删除数据不影响自增的顺序
insert into t4(name) values ('fff');

在这里插入图片描述

2.4 唯一约束

唯一(unique)约束,设置了唯一约束的列,的值不能重复

-- ================= 唯一约束 ================
create table t5(
 id int,
 name varchar(20) unique -- 唯一约束
);
insert into t5(name) values('aa');
-- 报错,name列的值重复, Duplicate entry 'aa' for key 'name'
insert into t5(name) values('aa');

2.5 非空约束

非空(not null)约束,设置了非空约束的列的值不能为空

-- ================= 非空约束 ================
create table t6(
 id int,
 name varchar(20) not null -- 非空约束
);
-- name不能没有值
insert into t6 (id) values (1);
-- 给name赋值
insert into t6 (id,name) values (1,'aaa');
-- 只是不能为空,可以重复
insert into t6 (id,name) values (2,'aaa');

2.6 默认值

默认值(default),给列设置默认值约束后,如果该列在插入数据时没有给值,就自动赋值默认值

-- ================= 默认值约束 ================
create table t7 (
 id int,
 sex char(1) default '男' -- 默认值
);
insert into t7 (id) values (1); -- 不给值时,默认填充男
insert into t7 (id,sex) values (2,'女');

2.7 外键约束

外键,是多表之间接的一种关联关系的一种限制.

语法

constraint 外键名 foreign key (当前表中的列名) references(主键);

设计订单表和商品表,订单表的数据要关联商品表数据

-- 商品表
create table tb_goods(
 gid int primary key,
 gname varchar(20),
 descr varchar(20)
);

-- 订单表 (订单表关联了商品表)
create table tb_order(
 oid int primary key,
 order_time datetime,
 gid int,
 -- 设置外键
 constraint fk_order_goods foreign key(gid) references tb_goods(gid)
);
/*
 被引用的表称为父表 parent , tb_goods
 引用别人的表称为子表 child , tb_order
*/
-- 给父表随便插入数据
insert into tb_goods values (2,'键盘','敲代码没有bug');
-- 给子表随便插入数据不行!! 这个数据得是父表中有的才行
insert into tb_order values (1,'2022-11-11',1);
-- 子表可以删除数据
delete from tb_order where oid = 1;

-- 父表被引用的数据不能删除
delete from tb_goods where gid = 2;
delete from tb_goods where gid = 1;

在这里插入图片描述

  • RESTRICT:如果想要删除父表的记录时,而在子表中有关联该父表的记录, 则不允许删除父表中的记录;
  • NO ACTION:同 RESTRICT,也是首先先检查外键;
  • CASCADE:父表 delete、update 的时候,子表会 delete、update 掉关联记录;
  • SET NULL:父表 delete、update 的时候,子表会将关联记录的外键字段所在 列设为 null,所以注意在设计子表时外键不能设为 not null;

2.8 练习

自己创建表,设计字段,把所有约束都试一遍

3 DQL

DQL 主要指查询语句,有查询单表数据,也有查多表数据表,今天主要学习单表查询

  • 基本查询
  • 条件查询
  • 模糊查询
  • 排序查询
  • 聚合查询
  • 去重查询
  • 分组查询
  • 限制查询

3.1 数据准备

将发的stu.sql导入到Navicat中

在这里插入图片描述

3.2 基本查询

select 字段1,字段2,… from 表名;


查询返回的是一张虚拟表,查询对原表数据没有任何影响,默认查询的全表数据

-- 基本查询
-- 查询所有列
select sid,sname,age,sex,score,cid groupLeaderId from stu;
-- 查询所有列,在测试,练习时可以使用*代替
select * from stu;
-- 查询指定 列
select sid,sname,sex from stu;

3.3 条件查询

条件查询就是在基础查询基础上,再给sql设置条件,只查询部分符合条件的数据

条件语句 : select 字段1,字段2,… from 表名 where 字段 条件 值;

条件运算符

  • =
  • >
  • <
  • >=
  • <=
  • !=
  • and
  • or
  • in
  • not in
  • between…and
-- ============== 条件查询 ==============
-- 查询学号为1001的学生信息
select * from stu where sid = 1001;
-- 查询学生成绩大于60的学生id 姓名,成绩
select sid,sname,score from stu where score > 60;
-- 查询学生性别为女,并且年龄小于50的记录
select * from stu where sex = '女' and  age < 50;
-- 查询学生学号为1001,或者姓名为李四的记录
select * from stu where sid = 1001 or sname = '李四';
-- 查询学号为1001,1002,1003的记录
select * from stu where sid = 1001 or sid = 1002 or sid = 1003;
select * from stu where sid in (1001,1002,1003);
select * from stu where sid >= 1001 and sid <= 1003;
-- 查询学号不是1001,1002,1003的记录
select * from stu where sid not in (1001,1002,1003);
select * from stu where sid != 1001 and sid != 1002 and sid != 1003;
-- 查询学生年龄在20到40之间的学生记录
select * from stu where age >= 20 and age <= 40;
select * from stu where age between 20 and 40;
-- 查询性别非男的学生记录
select * from stu where sex != '男';
select * from stu where sex = '女';

3.4 模糊查询

模糊查询其实也是条件查询

语法: select 字段1,字段2,… from 表名 where 字段 like '_值%';

  • _ 匹配任意一个字符
  • % 匹配任意多个字符
-- ============== 模糊查询 ============== 
-- 查询姓名以“张”开头的学生记录
select * from stu where sname like '张_';
select * from stu where sname like '张__';
select * from stu where sname like '张%';
-- 查询姓名中包含“三”的学生记录
select * from stu where sname like '%三%';

3.5 排序查询

对查询后的数据按照指定字段以及指定规则排序

语法: select 字段1,字段2,… from 表名 order by 字段 [desc|asc];

  • desc 降序
  • asc 升序,默认是升序

排序查询写在最后

-- ============== 排序查询 ============== 
-- 查询所有学生记录,按年龄升序排序
select * from stu order by age asc;
select * from stu order by age;
-- 查询所有学生记录,按年龄降序排序
select * from stu order by age desc;
-- 查询所有学生记录,按年龄升序排序,如果年龄相同时,按编号降序排序
select * from stu order by age asc , sid desc;
-- 查询成绩大于60的学生id,姓名,成绩,并根据成绩降序
select sid,sname,score from stu where score > 60 order by score desc;

3.6 聚合函数

将查询的结果,聚合运算得到一个结果值,语法特点

  • 聚合运算完,结果只有一行数据
  • 其他字段不能和聚合函数同时查询,除非有分组查询

聚合函数分类

  • count(expr) 计算指定列的不为null的行数
  • max(expr) 计算指定列的最大值
  • min(expr) 计算指定列的最小值
  • avg(expr) 计算指定列的平均数,除以不为null的条数
  • sum(expr) 计算指定列的和 ,计算不为null的数据
  • 函数中的expr,可以写列名,也可以写函数表达式

语法: select 聚合函数(字段) from 表名;

-- ============== 聚合函数  ============== 
-- 查询stu表中记录数:
select count(sid),sname from stu;
-- 查询stu表中有成绩的人数:
select count(score) from stu;
-- 查询stu表中成绩大于60的人数:
-- 先执行from获得全部数据,再通过where过滤数据,再计算select后
select count(sid) from stu where score > 60;
-- 查询所有学生成绩和
select sum(score) from stu;
-- 统计所有学生平均成绩
select avg(score) from stu;
select sum(score)/count(sid) from stu;
-- 查询最高成绩和最低成绩
-- 查询可以给列取别名,用as,as还可以省略
select max(score),min(score) from stu;
select max(score) as 最大值,min(score) as '最小值' from stu;
select max(score) 最大值,min(score) '最小值' from stu;

3.7 去重函数

可以将某列数据去重查询,distinct,一般不单独使用,配合聚合函数使用

-- ============== 去重查询 ============== 
-- 查询年龄不重复的共有多少人		
select count(distinct age) from stu;

3.8 分组查询

分组查询,就是将查询的数据分为几组.

语法: select 字段1,字段2,… from 表名 [where 字段 条件 值] group by 字段 having 字段 条件值;

  • group by 字段,根据指定字段分组
  • having 字段 值, 分组后再过滤

有个非常重要特点: SQL只要有分组,分成几组,查询结果就只有几行,所以一般配合聚合函数来使用


与聚合函数同时出现的列,必须出现在group by语句中

或者说group by后面的字段可以出现在select后

再或者说,sql语句中有group by,那么前面select后的字段,要么是group by字段,要么就是聚合函数

having和where都是过滤

  • where是分组前过滤,having是分组后过滤
  • where后不能使用聚合函数,having可以聚合函数

3.9 限制查询

就是将查询完的数据,可以限制展现条数

语法: limit n – 限制输出指定n条,从第一条开始

​ limit x,y – 限制输出,从x下标处输出y条,第一条的下标是0


常用于分页操作

-- 限制(limit)查询
select * from stu limit 3;
select * from stu limit 3,2;

4 顺序

4.1 书写顺序

select * from 表名 
where 条件 
group by 字段 
having 条件 
order by 
limit x,y
------
select cid,sum(score) from stu
where sid >= 1002
group by cid
having sum(score) > 100
order by sum(score) desc
limit 1

4.2 执行顺序

from   获得全部数据
where  过滤一部分数据
group by 分组
having   过滤分组后的数据
select  查询展现数据,这里 有聚合的话在此时聚合
order   排序
limit   限制

5 作业

先总计,复盘,过电影
重复代码

空需求,完成

作业

下标处输出y条,第一条的下标是0


常用于分页操作

-- 限制(limit)查询
select * from stu limit 3;
select * from stu limit 3,2;

4 顺序

4.1 书写顺序

select * from 表名 
where 条件 
group by 字段 
having 条件 
order by 
limit x,y
------
select cid,sum(score) from stu
where sid >= 1002
group by cid
having sum(score) > 100
order by sum(score) desc
limit 1

4.2 执行顺序

from   获得全部数据
where  过滤一部分数据
group by 分组
having   过滤分组后的数据
select  查询展现数据,这里 有聚合的话在此时聚合
order   排序
limit   限制

5 作业

先总计,复盘,过电影
重复代码

空需求,完成

作业

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1425193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch(ES) 下载添加IK分词器

上文 通过Web请求对 Elasticsearch(ES) 进行索引的 增删查 操作 我们通过web请求 创建了一个索引 但 目前 我们的索引是不具有分词效果的 我们并没有为索引指定分词器 所以 我们目前加进去的数据 就会保持原样 没有分词的能力 我们执行get查询操作 会发现一个 mappings字段 它…

v-if及v-for、computed计算属性的使用

v-if 概念及使用 v-if是Vue.js中的一个指令&#xff0c;用于根据表达式的真假值条件性地渲染一块内容。如果表达式的值返回真&#xff0c;则Vue会渲染这块内容&#xff1b;如果返回假&#xff0c;则不渲染。 基本用法: <p v-if"isVisible">看到我了吗&#…

【TI毫米波雷达】CLI模块初始化,demo工程覆写CLI控制指令代码的操作方式(以IWR6843AOP为例)

【TI毫米波雷达】CLI模块初始化&#xff0c;demo工程覆写CLI控制指令代码的操作方式&#xff08;以IWR6843AOP为例&#xff09; 本文主要针对demo工程 通过覆写CLI配置 跳过CLI配置命令 以此来达到自动配置参数 并控制雷达的功能 在此期间不开启CLI和相关初始化 只是针对CLI控…

穿越时空的视觉盛宴:古董展览可视化大屏的魅力

在我们的生活中&#xff0c;科技与传统的交融已经变得无处不在。走进古董的世界&#xff0c;仿佛打开了时光的闸门&#xff0c;每一件古董都承载着千年的故事与历史。然而&#xff0c;传统的古董展览方式&#xff0c;往往受限于空间和展示手段&#xff0c;难以让每一位观众深入…

在CentOS 7 中配置 YUM源

目录 YUM源的功能&#xff1a; YUM 源的安装过程 ps YUM工具 配置YUM仓库/YUM源 网络源&#xff1a;使用官方源 前提&#xff1a;联网 YUM源的功能&#xff1a; YUM&#xff08;Yellowdog Updater Modified&#xff09;是一个在Red Hat、CentOS、Fedora等基于RPM的Linux发…

八种Flink任务监控告警方式

目录 一、Flink应用分析 1.1 Flink任务生命周期 1.2 Flink应用告警视角分析 二、监控告警方案说明 2.1 监控消息队中间件消费者偏移量 2.2 通过调度系统监控Flink任务运行状态 2.3 引入开源服的SDK工具实现 2.4 调用FlinkRestApi实现任务监控告警 2.5 定时去查询目标库…

[网络安全] IIS----WEB服务器

一、 WEB服务器 WEB服务器 也叫网页服务器和 HTTP服务器使用协议: HTTP(端口:80) 或 HTTPS(端口443)浏览器:HTTP客户端网站: 一个或多个网页组成的集合 二、HTTP和HTTPS协议: HTTP : 是 HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09;的简写&#xff0c;…

[数据结构与算法]贪心算法(原理+代码)

博主介绍&#xff1a;✌专研于前后端领域优质创作者、本质互联网精神开源贡献答疑解惑、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战&#xff0c;深受全网粉丝喜爱与支持✌有需要可以联系作者我哦&#xff01; &#x1f447;&#…

HarmonyOS-Stage模型开发概述

Stage模型开发概述 基本概念 下图展示了Stage模型中的基本概念。 图1 Stage模型概念图 UIAbility组件和ExtensionAbility组件 Stage模型提供UIAbility和ExtensionAbility两种类型的组件&#xff0c;这两种组件都有具体的类承载&#xff0c;支持面向对象的开发方式。 UIAbili…

力扣hot100 无重复字符的最长子串 双指针 滑动窗口 哈希

Problem: 3. 无重复字符的最长子串 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考 Code ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) class Solution {public int lengthOfLongestSubstring(String s){if (s null ||…

Quartus生成烧录到FPGA板载Flash的jic文件

简要说明&#xff1a; Altera的FPGA芯片有两种基本分类&#xff0c;一类是纯FPGA&#xff0c;另一类是FPGASoc&#xff08;System on chip)&#xff0c;也就是FPGAHPS&#xff08;Hard Processor System&#xff0c;硬核处理器&#xff09;&#xff0c;对应两种Flash烧录方式&a…

算法模板 2.差分

差分和前缀和是逆运算 差分数组可以将对a数组任意区间的加/减操作优化到O ( 1 ) 一维差分 797. 差分 - AcWing题库 #include <bits/stdc.h> using namespace std; const int N 100010; int a[N], b[N];void insert(int l, int r, int c){b[l] c; //表示l以后&#x…

消息中间件之RocketMQ源码分析(三)

RocketMQ中的Consumer启动流程 RocketMQ客户端中有两个独立的消费者实现类分别为DefaultMQPullConsumer和DefaultMQPushConsumer&#xff0c; DefaultMQPullConsumer DefaultMQPullConsumer,该消费者使用时需要用户主动从Broker中Pull消息和消费消息&#xff0c;提交消费位点…

Altium Designer的学习

PCB设计流程 1.新建空白工程&#xff1a; 创建一个新的工程 新建四个文件&#xff0c;并且保存&#xff1a; 每次打开文件时&#xff0c;打开以.PrjPcb结尾的文件 2.元件符号的创建&#xff1a; 在绘制图形的时候设置成10mil,为了在原理图中显得不那么大。 在绘制引脚的时候设…

外星人入侵(python)

前言 代码来源《python编程从入门到实践》Eric Matthes 署 袁国忠 译 使用软件&#xff1a;PyCharm Community Editor 2022 目的&#xff1a;记录一下按照书上敲的代码 alien_invasion.py 游戏的一些初始化设置&#xff0c;调用已经封装好的函数方法&#xff0c;一个函数的…

将vant地区数据改为label value children格式

以下代码放到nodejs中运行 a.js文件内容&#xff0c;vant的数据&#xff0c;来自import { areaList } from vant/area-data&#xff0c;形如&#xff1a; const fs require(fs);const a require(./a.js);const b transformData(a); fs.writeFileSync(./b.js, JSON.string…

STM32G4 系列命名规则

STM32G4产品线 基础型系列STM32G4x1 具有入门级模拟外设配置&#xff0c;单存储区Flash&#xff0c;支持的Flash存储器容量范围从32到512KB。 增强型系列STM32G4x3 与基本型器件相比具有更多数量的模拟外设&#xff0c;以及双存储区Flash&#xff0c;Flash存储器容量也提高…

如何在Windows系统使用Plex部署影音服务与公网访问本地资源【内网穿透】

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通…

Spring-mybatis

怎样通过Spring整合Mybatis来实现业务 目录 1.导入依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency>&l…

快乐学Python,如何正确使用pandas处理时间类型的数据?

在日常的数据分析工作中&#xff0c;常常会有根据日期来对数据进行分析。比如我们需要通过用户的下单时间来分析用户在不同时间段对商品的喜好&#xff1b;如通过访问日志的访问时间来分析系统的访问周期和负载&#xff0c;为不同时间段的资源调配提供依据&#xff1b;如通过用…