【Day 6】MySQL 基础

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.mzph.cn/bicheng/2261.shtml

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

相关文章

C++/Qt 小知识记录5

工作中遇到的一些小问题&#xff0c;总结的小知识记录&#xff1a;C/Qt 小知识5 Windows下查看端口占用情况C调用Python三方库测试库有没有被加上的测试方法初始化使用Python的env环境&#xff0c;用Py_SetPythonHome设置GDAL相关的&#xff0c;需要把osgeo、rasterio的路径加入…

【iOS开发】(一)2024 从一无所有开始,到ios开发(react Native)

​ 2024 从一无所有开始&#xff0c;到ios开发&#xff08;react Native&#xff09; 目录标题 1 工具简介2 基础环境搭建1 安装 brew2 安装 Node.js3 安装 Yarn4 安装 React Native 脚手架 3 ios环境搭建4创建并启动一个app 在这里插入图片描述 1 工具简介 Homebrew (brew)&a…

OpenHarmony实战开发-页面布局检查器ArkUI Inspector使用指导

DevEco Studio内置ArkUI Inspector工具&#xff0c;开发者可以使用ArkUI Inspector&#xff0c;在DevEco Studio上查看应用在真机上的UI显示效果。利用ArkUI Inspector工具&#xff0c;开发者可以快速定位布局问题或其他UI相关问题&#xff0c;同时也可以观察和了解不同组件之间…

Matlab分段微分方程组拟合【案例源码+视频教程】

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之③:数据分析之一(智能报表)

概述 在企业数字化转型的过程中&#xff0c;ERP系统与数据平台作为核心支撑工具&#xff0c;对于提升运营效率、优化决策支持、实现业务流程一体化起着至关重要的作用。然而&#xff0c;智能报表与报表的智能化合并作为其中的重要领域&#xff0c;却往往面临诸多挑战与难点&am…

探索 去中心化的Web3.0

随着区块链技术的日益成熟和普及&#xff0c;Web3&#xff08;Web 3.0&#xff09;已经成为一个无法忽视的趋势。Web3不仅仅是一个技术概念&#xff0c;更是一个去中心化、透明、用户数据拥有权归还给用户的互联网新时代。在这篇文章中&#xff0c;我们将深入探讨Web3技术的核心…

纯js图片上传插件

目录标题 一、效果预览二、使用简单三、完整代码&#xff08;一&#xff09;index.html&#xff08;二&#xff09;css&#xff08;三&#xff09;js四、附带后台上传文件代码 一、效果预览 支持多图片上传&#xff0c;删除、预览。 二、使用简单 导入依赖&#xff08;需要…

Dart基础语法

Hello Dart Dart 语言与其他许多编程语言一样&#xff0c;以 main 函数作为程序的入口点。以下是一个简单的 "Hello Dart" 程序示例&#xff0c;展示了 Dart 语言的这一特点。 // 标准写法 void main(){print("Hello Dart"); }// 省略写法 main(){print(&…

WebGL绘制和变换三角形

1、绘制多个点 构建三维模型的基本单位是三角形。不管三维模型的形状多么复杂&#xff0c;其基本组成部分都是三角形&#xff0c;只不过复杂的模型由更多的三角形构成而已。 gl.vertexAttrib3f()一次只能向顶点着色器传入一个顶点&#xff0c;而绘制三角形、矩形和立方体等&am…

【网络安全】HTTP协议 — 特点

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 学习目标​ 一、请求与响应 1.服务器和客户端 二、不保存状态 1.不保存状态的协议 三、资源定位 1.URI&#xff08;统一资源标识符&#xff09; 四、请求方法 1.请求方法 五…

如何在window系统中安装Mysql

先简单来说说MySQL是什么&#xff1f; MySQL 是最流行的关系型数据库管理系统&#xff0c;在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一。 MySQL 由瑞典 MySQL AB 公司开发&#xff0c;目前属于…

多模态模型训练QA

Q&#xff1a;InternLM-XComposer的最新版本把vit的参数量降低了但是效果好了&#xff0c;所以好奇scale up vision encoder的收益大么&#xff1f;还是说重点是一个好的llm&#xff1f; A&#xff1a;结论是二者同步扩大才会起作用。我们试下来结论是llm 7b情况下&#xff0c…

利用AI知识库,优化医保系统售后信息管理流程

在医疗行业中&#xff0c;传统知识库管理虽能整合医疗行业知识&#xff0c;但搜索和管理效率有限&#xff0c;导致医护人员难以高效利用。特别是面对医保系统等复杂系统时&#xff0c;他们常需依赖人工客服或繁琐的电子产品手册解决问题。而HelpLook AI知识库利用AI技术&#x…

中国人民解放军信息支援部队成立

中国人民解放军信息支援部队成立 ----------强化信息化战争能力&#xff0c;维护国家安全 阅读须知&#xff1a; 探索者安全团队技术文章仅供参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作,由于传播、利用本公众号所提供的技术和信息而造成的任何直接或…

基于 Win32 编程,使用 C语言开发一个记事本。

现在 Win32 非常少见&#xff0c;因为太原始了&#xff0c;同时也因为高级语言做应用开发速度更快。但是用 C 语言开发一个 win32 记事本对于理解应用程序运行的内部原理还是很有帮助的&#xff0c;“最基础的就是最有用的”&#xff0c;Windows 编程圣经 《Windows 程序设计》…

HCIP学习笔记

个人学习hcip笔记 供参考 笔记有些乱 之后还会修改完善并添加其他篇幅 OSPF篇 OSPF采用组播方式发送hello包&#xff0c;组播地址为224.0.0.5 相关&#xff1a; 所有节点&#xff1a;224.0.0.1&#xff1b; 所有路由器&#xff1a;224.0.0.2&#xff1b; OSPF DRO发给DR&…

tcp inflight 守恒算法背后的哲学

tcp inflight 守恒拥塞控制的正确性 很久以前我开始纠结 tcp 锯齿&#xff0c;很多年后我知道这叫 capacity-seeking&#xff0c;甚至说 tcp 属于 capacity-seeking protocol 的原因就是它早已深入人心的 aimd 行为&#xff0c;而该行为生成了 tcp 锯齿。 在消除锯齿&#xf…

裸金属服务器和物理机有什么区别

今天&#xff0c;在我们生活的世界中&#xff0c;技术已经彻底改变了我们的生活。在开展在线业务时&#xff0c;服务器在快速高效地执行多项任务方面发挥了极其重要的作用。然而&#xff0c;很多人仍然对裡金属服务器和物理机感到很困惑。今天就给大家分析一下裡金属服务器和物…

算法训练营day15

一、层序遍历 参考链接7.2 二叉树遍历 - Hello 算法 (hello-algo.com) 层序遍历本质上属于广度优先遍历&#xff0c;也称广度优先搜索&#xff0c; BFS通常借助队列的先入先出的特性实现 参考链接102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 像这种较为…

利用技术优化医保购药体验:开发医保购药APP

为了解决线下医保买药繁琐的流程&#xff0c;利用技术优化医保购药体验成为了当务之急。因此&#xff0c;今天小编将为大家详解如何开发一款医保购药APP。 一、背景与意义 购药流程繁琐、耗时、信息不透明等问题日益凸显&#xff0c;亟需一种新的解决方案。开发医保购药APP可以…