【Day 6】MySQL 基础

devtools/2024/11/15 4:43:07/

1 MySQL

DataBase(DB)是存储和管理数据的仓库

DataBaseManagementSystem(DBMS)数据库管理系统,操纵和管理数据库的大型软件

SOL(Structured QueryLanguage)操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准

关系型数据库(RDBMS)建立在关系模型基础上,由多张相互连接的二维表组成的数据库

1.1 登录

cmd 下指令:

登录:

mysql -uroot -p1234

mysql -uroot -p

1234

实际上,MySQL 是安装在服务器上的,所以需要 VMware 模拟机来模拟一个服务器用作练习

1.2 建立数据库

建立数据库

cmd下

create database db01;

1.3 SQL 语法 & 分类

  • SQL 语句可以单行或多行书写,以分号结尾
  • SOL 语句可以使用空格/缩进来增强语句的可读性
  • MySQL 数据库的 SQL 语句不区分大小写
  • 单行注释:--注释内容 或 # 注释内容(MySQL特有)
  • 多行注释:/* 注释内容 */

注意顺序:

SQL 分类

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

1.3.1 DDL(数据库

查询所有数据库

show databases;

查询当前使用的数据库

select database();

使用

use 数据库名;

创建数据库

create database [if not exists] 数据库名;

删除数据库

drop database [if exists] 数据库名;

上述的 "database" 也可以替换为 "schema"

1.3.2 IDEA 图形化操作数据库

1.3.3 DDL(表结构)

创建表

create table 表名(

        字段1 字段类型 [约束] [comment 字段1注释]

        ...

        字段n 字段类型 [约束] [comment 字段n注释]

)[comment 表注释];

create table tb_user(id int comment 'ID,唯一标识',username varchar(20) comment '用户名',name varchar(10) comment '姓名',age int comment '年龄',gender varchar(1) comment '性别'
)comment '用户表';

但是此时 id 可以不唯一,要设置 id 唯一,就要设置约束

约束:是作用于表中字段上的规则,用于限制存储在表中的数据

约束描述关键字
非空约束限制该字段不能为 nullnot null
唯一约束保证字段唯一unique
主键约束主键是一行数据的唯一标识,非空且唯一primary key
外键约束让两张表的数据建立链接,保证数据的一致性和完整性foreign key
默认约束默认default

现在加入了约束,删除旧表,创建新表,并且手动加入数据

create table tb_user(id int primary key comment 'ID,唯一标识',username varchar(20) not null unique comment '用户名',name varchar(10)not null comment '姓名',age int comment '年龄',gender varchar(1) default '男' comment '性别'
)comment '用户表';drop table tb_user; -- 删除表delete from tb_user; -- 删除表中的数据insert into tb_user values(1,'1401173962','wyn',21,'m'); -- 向表中插入数据

另外,主键可以加上 auto_increment 自动增长:

1.3.4 数据类型

MySQL数据分为三种:

  • 数值类型
  • 字符串类型
  • 日期时间类型

数值类型:

tinyintsmallintmediumintintbigintfloatdoubledecimal

注:

可以加上无符号:如 tinyint unsigned

后三者的格式为:如 float(5,2) 5表示整个数字长度,2表示小数位个数

字符串类型:

char(10),代表长度总是10,但是性能好,以空间换时间

varchar(10),代表长度随着实际改变,但是性能差,以时间换空间

日期时间类型:

1.4 案例一:设计表结构

这次在 IDEA 里面创建表:

注:

在表中还要加上两条数据:

  • create_time 记录这条数据插入的时间
  • update_time 记录这条数据最后更新的时间

1.5 DDL(表操作)

查询当前数据库所有表

show tables;

查询表结构

desc 表名

查询建表语句

show create table 表名

添加字段

alter table 表名 add 字段名 类型 [comment 注释] [约束];

修改字段类型

alter table 表名 modify 字段名 新数据类型;

修改字段名和字段类型

alter table 表名 change 旧字段名 新字段名 类型 [comment 注释] [约束]

2 DML

DML(Data Manipulation Language)用来对数据库中表的数据记录进行增、删、改操作

增:

 

更新:

删:

3 DQL

DQL(Data 0ueryLanguage),用来查询数据库表中的记录

查询分五种:

  • 基本查询
  • 条件查询
  • 分组查询
  • 排序查询
  • 分页查询

3.1 基本查询

3.2 条件查询

-- =================== DQL:条件查询 ===================
-- 1.查找姓名为"杨逍"的员工
select * from tb_emp where name = '杨逍';-- 2.查找 id 小于等于 5 的员工信息
select * from tb_emp where id <= 5;-- 3.查找没有分配职位的员工信息
select * from tb_emp where job is null;-- 4. 查找有职位的员工信息
select * from tb_emp where job is not null;-- 5.查询密码不为'123456'的员工信息
select * from tb_emp where password != '123456';-- 6.查询 入职日期 在'2000-01-01’(包含)到'2010-01-01'(包含)之间的员工信息
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';-- 7.查询 入职日期 在'2000-01-01’(包含)到'2010-01-01'(包含)之间的【女】员工信息
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01' and gender=2;-- 8.查询 职位是 2(讲师),3(学工主管),4(教研主管)的员工信息
select * from tb_emp where job=2 or job=3 or job=4;
select * from tb_emp where job in (2,3,4);-- 9.查询 姓名 为两个字的员工信息
select * from tb_emp where name like '__';-- 10.查询 姓"张”的员工信息
select * from tb_emp where name like '张%';

3.3 分组查询

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

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

聚合函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和
-- =================== DQL:分组查询 ===================
-- 1.统计员工数量
select count(id) from tb_emp;
select count(1) from tb_emp; -- 常量
select count(*) from tb_emp; -- 通配符-- 2.统计该企业最早入职的员工
select min(entrydate)from tb_emp;
select name,entrydate from tb_emp where entrydate = (select min(entrydate)from tb_emp);-- 3.统计该企业最迟入职的员工
select max(entrydate)from tb_emp;
select name,entrydate from tb_emp where entrydate = (select max(entrydate)from tb_emp);-- 4.统计 id 均值
select avg(id) from tb_emp;-- 4.统计 id 之和
select sum(id)from tb_emp;

分组查询:

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

where 和 having 的区别

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

注:

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

(因为分组之后再去查所有字段,还不如不用分组)

  • 执行顺序:where > 聚合函数 > having

3.4 排序查询

select 字段列表 from 表名 [where 条件列表] [group by 分组字段] order by 字段1 排序方式1

排序方式:

  • ASC(默认):升序
  • DESC:降序
-- =================== DQL:排序查询 ===================
-- 1.根据入职时间,对员工进行升序排序
select * from tb_emp order by entrydate;-- 2.根据入职时间,对员工进行降序排序
select * from tb_emp order by entrydate desc;-- 3.根据 入职时间 对公司的员工进行 升序排序, 入职时间相同,再按照 更新时间 进行降序排序
select * from tb_emp order by entrydate,update_time desc ;

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

3.5 分页查询

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

 起始索引 = (页码-1) * 每页展示记录数

4 案例二:条件分页查询

查询所有姓张,男性,入职时间从2000年1月1日到2015年12月31日的员工,并且一页十条

查询男性、女性员工多少人,各种职位多少人

if语句:

if(条件表达式, true取值, false取值)

case语句:

case 表达式 when 值 then 结果1 when 值2 then 结果2...else ...end

5 多表设计

  • 一对多
  • 一对一
  • 多对多

5.1 一对多

部门-员工

一对多关系实现:在数据库表中多的一方,添加字段,来关联一方的主键

外键:保证了数据的一致性和完整性

-- 创建表时指定

create table 表名(

        字段名 数据类型,

        ...

        [constraint] [外键名称] foreign key(外键字段名) references 主表(字段名)

);

--  建完表后,添加外键

alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(字段名);

推荐使用逻辑外键

 5.2 一对一

  • 案例:用户 与 身份证信息 的关系
  • 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率

5.3 多对多


http://www.ppmy.cn/devtools/12814.html

相关文章

IOTOS物联中台衔接通信连接驱动和协议报文驱动,实现多个设备实例复用同一个TCP端口,以modbus rtu协议tcp透传方式采集数据

网站&#xff1a;UIOTOS前端零代码 原型即应用&#xff01;支持页面嵌套、属性继承、节点编辑&#xff0c;真正实现页面即组件&#xff0c;支持无代码开发复杂的前端界面应用。 从前面驱动实例可以看出&#xff0c;设备连接通信和报文解析通常是在一个驱动里&#xff0c;这种方…

【Web】2022DASCTF X SU 三月春季挑战赛 题解(全)

目录 ezpop calc upgdstore ezpop 瞪眼看链子 fin#__destruct -> what#__toString -> fin.run() -> crow#__invoke -> fin#__call -> mix.get_flag() exp <?php class crow {public $v1;public $v2;}class fin {public $f1; }class what {public $a; }…

Jenkins 打包报错记录 error: index-pack died of signal 15

问题背景&#xff0c;打包每次到92%时就会报错&#xff0c;试了好几次都是同样的错误 14:56:53 fatal: index-pack failed 14:56:53 14:56:53 at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2734) 14:56:53 at org.jenkinsci.plugi…

JavaScript系列------1

1. JavaScript组成 ECMAScript JS 语言基础。比如&#xff1a;变量、分支语句、循环语句、对象等等。 Web APIs DOM(页面文档对象模型): 操作文档&#xff0c;比如对页面元素进行移动、大小、添加删除等操作 BOM(浏览器对象模型): 操作浏览器&#xff0c;比如页面弹窗&#x…

vue 对axios二次封装,配置api层,基于mock测试数据

一、初始化环境&#xff08;默认都会安装vue3项目ts&#xff09; 安装mock&#xff1a;全局安装 # 使用 npm 安装 npm install mockjs vite-plugin-mock # 使用 yarn 安装 yarn add mockjs vite-plugin-mock 二、进行配置 在vite.config.ts中进行配置 import { UserConfigEx…

F检验的步骤

F检验&#xff0c;也称为联合假设检验或方差齐性检验&#xff0c;主要用于检验两个或多个正态随机变量的总体方差是否相等。它还可以用于检验两个以上随机变量平均数差异的显著性。以下是F检验的一般使用步骤&#xff1a; 提出假设&#xff1a;首先&#xff0c;需要建立原假设&…

SpringBoot学习之Kafka下载安装和启动【Windows版本】(三十四)

一、配置Java环境变量 打开CMD输入java -version检查java环境变量是否配置正确,如果配置正确在CMD窗口输入java -version应该输出如下: ​ 怎么配置Java环境变量这里我就不赘叙了,网上教程很多,请读者自行搜索操作。 二、下载Kafka 1、Kafka官网地址:Apache Kafka,…

Next实现 i18n 传递 locales 给 getStaticPaths

在 Next.js 中实现国际化&#xff08;i18n&#xff09;时&#xff0c;可以通过配置 next.config.js 文件来传递 locales 给 getStaticPaths 函数。下面是一个示例代码&#xff0c;演示如何在 next.config.js 中配置 locales&#xff0c;并在 getStaticPaths 中获取并使用这些 …