MySQL-CRUD入门1

news/2024/9/18 13:13:04/ 标签: mysql, 数据库

文章目录

    • 认识配置文件
    • 数据的添加(Create)
      • 添加一行数据
      • 添加多行数据
      • 两种添加数据的效率对比
    • 数据的查询(Retrieve)
      • 全列查询
      • 指定列查询
      • 查询中带有表达式
        • 关于字面量
        • 关于as重命名
      • 临时表引入
      • distinct去重
      • order by 排序
        • 关于NULL

认识配置文件

在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就是下图中的my.ini文件, 原来的这个文件夹里面是有一个Data文件夹的, 里面存储的是s数据库数据, 我们通过修改配置文件的路径将其导入到了其他的盘里面去, 防止占用系统空间, 下文中有一些指南帮助我们完成这一操作
在这里插入图片描述
打开我们的my.ini文件, 这里我们打开的方式是通过vscode打开的, 也可以用其他的一些工具, 比如记事本打开, 但是就没有高亮显示了…

client节点

所有关于客户端的配置都在client节点下, 也就是说这个节点下的修改会对所有的客户端产生影响, 带exe文件的大部分都是客户端的相关文件, 如下图所示, 我们平时使用的mysql命令行窗口登录的时候用的就是图中的mysql.exe文件, 自己可以进行验证
在这里插入图片描述

在这里插入图片描述
这里要注意的是绿色的都是注释, client这个节点下的一些文件代表着所有客户端的配置, mysql的端口号是3306(默认的端口号), 端口号的可用的范围是1025-65535

mysql_11">mysql节点

这个节点下是一些指定客户端的配置, 比如这里的就是mysql这个客户端的相关配置, 这个节点下的配置只是针对mysql.exe这一个客户端程序的
在这里插入图片描述
当然你也可以创建一些针对其他客户端程序的配置, 方法与上面的创建指定客户端的方法是一样的…

mysqld_15">mysqld节点

这个节点是控制着服务器端程序, 也就是mysqld程序在这里插入图片描述
这个程序就是跟mysql服务相关的, mysql服务启动这个程序就随之启动, 关闭就随之关闭, 所以这个节点的配置文件比较多, 我们下面只是简单的谈几个
在这里插入图片描述
端口以及数据存储位置
在这里插入图片描述
端口这里是用的默认端口, 上面的文件配置已经是修改过路径的结果了, 原来的数据路径是C盘(系统盘)下面的, 这里我们需要找到data文件夹, 然后复制到你要移动的其他文件夹当中, 然后修改这个路径就可以完成修改
存储引擎相关
在这里插入图片描述
存储引擎就是控制底层数据的存储的
日志相关
在这里插入图片描述
编码字符集
在这里插入图片描述
更新完配置文件之后就进行MySQL的重新启动(关闭服务之后再次开启)

数据的添加(Create)

不管是哪一种添加数据的方式,

添加一行数据

基础语法

  1. 插入指定的字段
insert into (表名) (字段名1,...)  values (字段1对应的值,...);
  1. 插入全部的字段(字段名称可以省略)
insert into (表名) values (字段1对应的值,...);

下面我们尝试执行下面的sql语句进行测试

-- 删除老的数据库
drop database if exists test_insert;
-- 创建新数据库
create database test_insert character set utf8mb4;
-- 使用该数据库
use test_insert;
-- 创建一张表
create table if not exists student(name varchar(50) comment '姓名',sex varchar(2) comment '性别',age int comment '年龄'
);-- 单行指定列
insert into student (name, age) values ('john', 19);
-- 单行全列(type1不省略字段)
insert into student(name, sex, name) values ('max', '男', 18);
-- 单行全列(type2省略字段)
insert into student values ('amy', '女', 20);-- 展示数据
select * from student;

通过source命令进行sql脚本文件的执行, 结果如下
在这里插入图片描述

添加多行数据

基础语法

-- 与单行插入基本上一模一样, 就是values后面的数据可以跟多个
insert into (表名) (字段名1,...)  values (字段1对应的值,...),(..),.;

在上面的基础上我们新添加几组数据进行测试

-- 删除老的数据库
drop database if exists test_insert;
-- 创建新数据库
create database test_insert character set utf8mb4;
-- 使用该数据库
use test_insert;
-- 创建一张表
create table if not exists student(name varchar(50) comment '姓名',sex varchar(2) comment '性别',age int comment '年龄'
);-- 单行指定列
insert into student (name, age) values ('john', 19);
-- 单行全列(type1不省略字段)
insert into student(name, sex, age) values ('max', '男', 18);
-- 单行全列(type2省略字段)
insert into student values ('amy', '女', 20);-- 多行指定列
insert into student (name, age) values ('huahua', 18), ('tiantian', 17);
-- 多行全列(type1不省略字段)
insert into student (name, sex, age) values ('xinle', '女', 18), ('chenjie', '女', 20);
-- 单行全列(type2省略字段)
insert into student values ('wuyu', '男', 19), ('meicile', '男', 21);-- 展示数据
select * from student;

在这里插入图片描述

两种添加数据的效率对比

下面有一个问题, 到底是一次插入一条数据插入多次, 还是一次性的插入多条数据, 两种插入的方式哪一种效率高呢, 我们从下面的几个方面来考虑

  1. MySQL是通过网络进行连接的, 所以每次执行一条SQL语句的时候都有一定的网络开销, 每次向服务器发送请求和接收响应都是一个不可控的因素
  2. 输入输出方面的考虑, 每次插入数据的时候都有磁盘IO方面的开销
  3. 每次执行一条SQL语句都会开启一个事务, 事务的开启和关闭都需要消耗系统的资源-- 删除老的数据库

综上, 一次提交多条(在一个可控的范围内, 不能太多, 有时候网络都撑不住)比一次提交一条效率略高

数据的查询(Retrieve)

我们还是给出来下面的SQL代码来初始化一个数据表

-- 删除老的数据库
drop database if exists sel_test;
-- 创建新的数据库(建议指定字符集为utf8mb4)
create database sel_test character set utf8mb4;
-- 使用该数据库
use sel_test;
-- 创建数据表
create table if not exists exam(id bigint comment '学生编号',name varchar(20) comment '学生姓名',chinese decimal(4, 1) comment '语文成绩',math decimal(4, 1) comment '数学成绩',english decimal(4, 1) comment '英语成绩'
);-- 插入多条数据用于测试
insert into exam (id, name, chinese, math, english) values(1, '唐三藏', 67.0, 98.0, 56.0),(2, '孙悟空', 87.5, 78.0, 77.0),(3, '猪悟能', 88.0, 98.0, 90.0),(4, '曹孟德', 82.0, 84.0, 67.0),(5, '刘玄德', 55.5, 85.0, 45.0),(6, '孙权', 70.0, 73.0, 78.5),(7, '宋公明', 75.0, 65.0, 30.0);

全列查询

基础语法

select * from (表名);

测试一下
在这里插入图片描述
全列查询的弊端
全列查询没什么可说的, 语法上非常简单, 但是在我们的生产环境中, 一般不会进行全列查询的操作, 或者说, 全列查询是一个非常危险的操作
因为在生产环境中,一个表中的数据量可能会很多很多,有可能达到TB级
1.当一个查询开始的时候,磁盘开销,会网络开销,都是非常紧缺的资源
2.如果这一条语句开始执行,那么就有可能把服务器资源吃光,其他的程序或是数据库操作就要等待当前SQL执行完之后才能继续执行
所以不加任何限制的查询在生产环境不要使用 ! ! !

指定列查询

基础语法

-- 其实就是把上面全列查询的 * 替换为了多种字段 字段1, 字段2 ...
select (字段1, 字段2,...) from (表名);

查询演示
在这里插入图片描述

查询中带有表达式

关于字面量

思考下面的SQL语句的执行结果

select id, name, math, 100 from exam;

效果就是在所有列的后面加入一个字面量100
在这里插入图片描述
所以我们可得, 对一种字面量的查询效果是在每一行都加上这个字面量

下面是单独的查询字面量的结果(直接展示结果)
在这里插入图片描述

关于as重命名

思考, 假设现在有这样一个需求, 我想让查询出来的学生的语文成绩 +10
那我们就需要执行下面的代码

select id, name, chinese + 10, math, english from exam;

在这里插入图片描述
我们还可以用as关键字(可以省略)对表达式重命名

select id, name, chinese + 10 as '语文成绩', math, english from exam;
注意 :这里的 ' ' 单引号如果重命名名称有空格的话无法省略,其余条件可省

在这里插入图片描述
下面考虑一个需求, 我们想知道每个人的总分, 我们就可以执行下面的语句

select id, name, chinese + math + english as 总分 from exam;

在这里插入图片描述

临时表引入

我们通过测试就可以发现, 其实查询的时候对结果的操作并不会真实的操作磁盘中保存的真实的数据, 是因为中间其实有临时表作为中间过渡, 其实有点类似于Java中的访问器方法与更改器方法的区别, 对于字符串类中的方法其实都是访问器方法不会更改真正的字符串(也就是字符串不可变)

distinct去重

这是一个进行去重操作的关键字, 对于一个查询的数据, 只有当所有的字段(查询的)都相同的时候才会进行去重, 其余条件是不会进行去重的
为了测试我们执行下面的操作

insert into exam values (8, '齐天大圣', 87.5, 78.0, 77.0);
select distinct chinese, math, english from exam;

在这里插入图片描述
说明我们的distinct对新添加的数据进行了去重

select distinct id, name, chinese, math, english from exam;

在这里插入图片描述
在这个语句中就不会对结果进行去重的操作

order by 排序

asc就是升序, desc就是降序, 不写默认降序
假如我们需要对数学成绩进行降序排列

select id, name, chinese, math, english from exam order by math desc;

在这里插入图片描述
对总分进行排序
在这里插入图片描述

关于NULL

关于NULL有下面几点需要注意

  1. NULL在排序中不论什么时候都是最小的
  2. NULL不论跟谁进行运算都是NULL
  3. NULL始终被判定为false
  4. NULL在其他编程语言中是默认值 ‘0’, 但是在MySQL中就是NULL

谢谢观看


http://www.ppmy.cn/news/1524735.html

相关文章

动手学深度学习(pytorch)学习记录26-卷积神经网路(LeNet)[学习记录]

目录 LeNet模型训练 LeNet 总体来看,LeNet(LeNet-5)由两个部分组成: 卷积编码器:由两个卷积层组成; 全连接层密集块:由三个全连接层组成。 每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均…

【网络安全】服务基础第二阶段——第五节:Linux系统管理基础----Linux常见应用服务(Apache、数据库)

在Linux系统中,有许多常见的应用服务,它们用于执行各种任务,如网页托管、数据库管理、文件传输等。 Apache HTTP Server:用于托管网站和Web应用程序的Web服务器。Nginx:高性能的Web服务器和反向代理服务器&#xff0c…

TimedRotatingFileHandler 修改 suffix 后 backupCount 设置失效无法自动删除文件

本文主要分析 TimedRotatingFileHandler 在实际使用中 backupCount 设置未生效的问题。源码分析显示,文件删除依赖于后缀 suffix 的正则匹配,如果自定义了 suffix 格式,必须同步更新 extMatch 的正则表达式(保证正则表达式可以正常…

RK3568平台开发系列讲解(LCD篇)Framebuffer开发

🚀返回专栏总目录 文章目录 一、FrameBuffer 应用编程二、LCD 基础2.1、分辨率2.2、像素格式2.3、LCD 成像步骤2.4、LCD 屏幕时序2.4.1、行显示时序2.4.2、帧显示时序三、FrameBuffer 操作步骤四、LCD 应用编程实验沉淀、分享、成长,让自己和他人都能有所收获!😄 line di…

性能测试:Locust使用介绍(三)

配置 Locust的配置,可以通过三种方式进行。第一种是命令行执行选项,第二种是将配置写到环境变量中,第三种是通过配置文件进行配置。 命令行选项 locust --helpUsage: locust [options] [UserClass ...]常用选项:-h, --help 显示…

VSCode 创建Python 项目(最简单,最少步骤,无痛从pycharm迁移项目)

第一步:下载 下载地址:https://code.visualstudio.com/docs/?dvwin64user 第二步:配置 2.1:VsCode设置中文 按住键盘上的“CtrlShiftP”组合键,打开命令面板。 在命令面板中输入“Configure Display Language”。点击…

LSS可视化分析

1 完整 2 去掉plt.imshow(img_show) 3 去掉plt.axis(‘off’) 4 去掉plt.annotate(cams_text[img_id].replace(‘_’, ’ ), (0.01, 0.92), xycoords=‘axes fraction’)

【自然语言处理】第二章现代语言学基础

【自然语言处理】第二章现代语言学基础 文章目录 【自然语言处理】第二章现代语言学基础1. 语言学与人类的语言1.1 现代语言学的源起及学科分支概况1.2 人类语言的符号性与层级性2. 语言系统及其知识模型2.1 语音系统2.2 词汇系统2.3 句法系统2.4 语义系统2.5 语用系统3. 语言的…

1、https的全过程

目录 一、概述二、SSL过程如何获取会话秘钥1、首先认识几个概念:2、没有CA机构的SSL过程:3、没有CA机构下的安全问题4、有CA机构下的SSL过程 一、概述 https是非对称加密和对称加密的过程,首先建立https链接需要经过两轮握手: T…

SpringMVC基于注解使用:JSON

01-json处理--介绍 json数据格式回顾: 在pom.xml导入依赖 在web.xml里面导入配置文件 ResponseBody 注解是将返回值作为文本返回到客户端了而不是字符串了 当我们想返回bean对象的json数据的时候我们需要先导入jackson依赖在pom.xml里面 然后创建User类&#xff0c…

分享一个基于微信小程序的医院挂号就诊一体化平台uniapp医院辅助挂号应用小程序设计(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

前端开发的单例设计模式

一、什么是单例模式 单例模式(Singleton Pattern)是一种常见的设计模式,它确保在整个应用程序的生命周期中,一个类只能创建一个实例。无论你在代码的任何地方尝试创建该类的新实例,它都会返回已经存在的唯一实例。这在…

计算机网络分层结构解析:OSI与TCP/IP模型

文章目录 计算机网络分层结构解析:OSI与TCP/IP模型一、引言二、OSI七层模型1、模型介绍1.1、层次功能 2、模型特点 三、TCP/IP四层模型1、模型介绍1.1、层次功能 2、模型特点 四、总结 计算机网络分层结构解析:OSI与TCP/IP模型 一、引言 计算机网络的分…

【前端UI框架】VUE ElementUI 离线文档 可不联网打开

【前端UI框架】VUE ElementUI 离线文档 可不联网打开 Element - The worlds most popular Vue UI framework Element - The worlds most popular Vue UI framework 离线文档下载地址 https://download.csdn.net/download/G971005287W/89742895 文档制作 第一步: 克隆源代码 …

oceanbase(ob)基于备份集搭建备租户方式

一、搭建备租户方式(基于备份的方式) 注意事项:要有一个源端OB集群和目标端OB集群。 1、新建主租户(如果原来有主租户可是省略) #创建unit create resource unit ut_2c2g max_cpu2, memory_size2G, max_iops10000,l…

网络安全实训七(MSF与CS互相连接)

1 MSF连接CS 1.1 生成木马上传到/var/www/html中 1.2 开启apache服务 1.3 设置监听模组并运行 1.4 在靶机上打开网页运行木马 1.5 kali机中获取反弹的shell 1.6 运行CS服务器 1.7 windows端作为客户端连接CS 1.8 新建一个监听器 1.9 返回kali机中使用载荷注入模块,…

【Linux网络】详解TCP协议(1)

🎉博主首页: 有趣的中国人 🎉专栏首页: Linux网络 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好,本片文章将会讲解 TCP协议 的相关内容。 如果看到最后您觉得这篇文章写得不错&am…

前端开发的观察者模式

什么是观察者设计模式 观察者模式(Observer Pattern)是前端开发中常用的一种设计模式。它定义了一种一对多的依赖关系,使得当一个对象的状态发生改变时,其所有依赖对象都能收到通知并自动更新。观察者模式广泛应用于事件驱动的系…

如何在 Visual Studio Code 中反编译具有正确行号的 Java 类?

优质博文:IT-BLOG-CN 问题 我在 macOS 中使用 vscode 版本 1.92.2,并安装了Java 扩展包v0.29.0。当我打开command click或right click->Go to definition一个没有源代码的类时,vscode 会使用 FernFlower 反编译器打开 .class 文件。但…

python-古籍翻译

题目描述 小理跑到外星人的图书馆去读书。有一本外星古籍,里面的内容是用八进制写成的;但小理只能处理十六进制的数据。请你帮忙写一个翻译软件,帮小理把八进制串翻译成十六进制串。 输入 仅一行,一个八进制字符串 s&#xff0…