【MySQL】表的增删改查——MySQL基本查询、数据库表的创建、表的读取、表的更新、表的删除

文章目录

  • MySQL
  • 表的增删查改
    • 1. Create(创建)
      • 1.1 单行插入
      • 1.2 多行插入
      • 1.3 替换
    • 2. Retrieve(读取)
      • 2.1 select查看
      • 2.2 where条件
      • 2.3 结果排序
      • 2.4 筛选分页结果
    • 3. Update(更新)
      • 3.1 更新单个数据
      • 3.2 更新多个数据
    • 4. Delete(删除)

MySQL

在这里插入图片描述

  

表的增删查改

  CURD是一个数据库技术中的缩写词,它代表Create(创建),Retrieve(读取),Update(更新),Delete(删除)操作。这四个基本操作是数据库管理的基础,用于处理数据的基本原子操作。
  

1. Create(创建)

  在MySQL中,Create操作是十分重要的,它帮助用于创建数据库对象,如数据库、表、索引等并且允许用户定义新的数据结构和存储方式。我们常使用create databases [库名]; 创建数据库,create table [表名]; 创建数据表,insert into [表名] values(数据); 创建单条数据。
  

1.1 单行插入

  insert 语句在 MySQL 中用于向数据库表中插入新的记录。

insert into 表名 (1,2,3, ...)  
values(1,2,3, ...);

  如果你想要为表中的每一列都插入值(即列的顺序与表中的定义一致),我们直接省略列名:

insert into 表名  
values(1,2,3, ...);

  

创建一张学生数据表,包括学号,姓名,电话等基本信息:

mysql> create table test1(-> id int unsigned primary key auto_increment,-> num int not null,-> name varchar(20) not null,-> tele varchar(20)-> );

  对于上面的表中,id代表学号,每一个学生有且只有唯一的一个,所以我们设计为主键,同时设置为自增长,下面的num和name设置为不为空类型。

  

查看表的结构:

desc test1;

在这里插入图片描述
  

连续插入三个单条数据并且打印查看:

mysql> insert into test1 values(1,101,'张三',15811);
mysql> insert into test1 values(2,102,'李四',NULL);
mysql> insert into test1(num,name,tele) values(103,'王五',18888);
select * from test1;

在这里插入图片描述

  

1.2 多行插入

  insert语句可以一次性插入多行数据通常我们只需要在values子句中列出多组值来实现的,每组值之间用逗号分隔。

insert多行插入并且打印:

mysql> insert into test1 (num,name,tele) values-> (104,'赵六',12345),-> (105,'小七',54321);
select *from test1;

在这里插入图片描述
  

  确保我们插入的数据和列的数据匹配,如果列中not null,我们需要提供值,除非有默认值,我们要注意由于插入的数据是否会因为主键或者唯一键对应的值已经存在而导致插入失败。

对应主键已经有唯一值导致插入失败:

mysql> insert into test1 values(1,106,'老八',null);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

在这里插入图片描述

  

1.3 替换

  replace 语句在 SQL 中是一个特殊的语句,它结合了 insert 和 update 的功能。既可以插入数据也可以替换数据。

  插入数据:如果 replace 语句中指定的数据在表中不存在,它会执行一个插入操作,将数据添加到表中。

  替换数据:如果数据已经存在于表中(通常是因为主键或唯一键冲突),replace 语句会先删除原有的数据行,然后插入新的数据行。

replace into 表名 (1,2,3, ...)  
values(1,2,3, ...);

  总而言之:主键或者唯一键没有冲突,则直接插入;主键或者唯一键如果冲突,则删除后再插入。

  

替换原有的主键数据并插入新的数据:

mysql> replace into test1 values(1,106,'老八',null);

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  

2. Retrieve(读取)

  Retrieve操作在数据库应用中主要用于从数据窗口或数据存储(Datastore)中检索数据。常用的有select进行数据的显示,或者其他如where等进行数据的筛选。
  

2.1 select查看

  SELECT是SQL语言中的一个核心命令,用于从数据库表中检索数据。

[distinct]{* | {column[,column]...}
[from table_name]
[where...]
[order BY column[ASC|DESC],...]
limit...

  distinct:这个关键字用于去重。

  * 或 {column[,column]…}:这部分指定了要检索的列。* 表示选择所有列,而 {column[,column]…} 则允许您指定一个或多个列名。

  from table_name:这部分指定了要从哪个表中检索数据。

  where…:这是一个可选的子句,用于过滤结果集,只返回满足指定条件的行。

  order BY column[ASC|DESC],…:这部分用于对结果集进行排序。 您可以指定一个或多个列,以及排序的方向(升序 ASC 或降序 DESC)。

  limit…:这个子句用于限制返回的记录数。 它通常与分页查询一起使用。

创建学生成绩表:

mysql> create table test2(-> id int unsigned primary key auto_increment,-> name varchar(20) not null,-> chinese float default 0.0 comment '语文成绩',-> math float default 0.0 comment '数学成绩',-> english float default 0.0 comment '英语成绩'-> );

查看表结构:

desc test2;

在这里插入图片描述
  

向表中插入数据并且打印:

mysql> insert into test2(name,chinese,math,english) values-> ('张三',70,80,59),-> ('李四',72,90,65),-> ('王五',60,65,90),-> ('赵六',64,77,80),-> ('刘七',77,82,78),-> ('小红',90,43,90),-> ('李华',79,75,52);

  通常情况下不建议使用 * 进行全列查询,查询的列越多,意味着需要传输的数据量越大;可能会影响到索引的使用。

select * from test2;

在这里插入图片描述
  

指定列打印信息(id,name,chinese):

select id,name,chinese from test2;

在这里插入图片描述
  

打印的字段可以是一个表达式:

select id,name,chinese+math+english from test2;

在这里插入图片描述
  

给打印字段的表达式重新命名:

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

在这里插入图片描述
  

将打印出来的英文成绩去重:

select distinct english from test2;

在这里插入图片描述
  

2.2 where条件

  在MySQL的select语句中,where子句用于指定查询条件,只有满足这些条件的记录才会出现在结果集中。where子句的主要目的是从数据表或查询结果中过滤出符合条件的行。

  where子句后面可以跟随一个或多个条件,这些条件可以是算术表达式、逻辑表达式或比较运算符的组合。

  

  比较运算符:

运算符说明
<,<=, >, >=大于,大于等于,小于,小于等于
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>不等于
between a0 and a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
in (option, …)如果是 option 中的任意一个,返回 TRUE(1)
is null是 NULL
is not null不是 NULL
like模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

  

  逻辑运算符:

运算符说明
and多个条件必须都为 TRUE(1),结果才是 TRUE(1)
or任意一个条件为 TRUE(1), 结果为 TRUE(1)
not条件为 TRUE(1),结果为 FALSE(0)

  

输出所有英语成绩小于60分的信息:

select name,english from test2 where english<60;

在这里插入图片描述
  

输出所有英语成绩大于等于60小于等于89的成绩:

select name,english from test2 where english>=60 and english<=89;
select name,english from test2 where english between 60 and 89;

在这里插入图片描述

在这里插入图片描述
  

输出数学成绩为80或90分的信息:

select name,math from test2 where math=80 or math=90;
select name,math from test2 where math in(80,90);

在这里插入图片描述
  

找到所有的姓张的信息:

  % 匹配任意多个(包括 0 个)任意字符,_ 匹配严格的一个任意字符。

select name,math from test2 where name like '张%';

在这里插入图片描述
  

找叫 张、张X、张XX 的人员信息,

select name,math from test2 where name like '张';
select name,math from test2 where name like '张_';
select name,math from test2 where name like '张__';

在这里插入图片描述
  

找到所有总分小于210分的人员信息:

 select name,math+chinese+english 总分 from test2 where chinese+math+english<210;

在这里插入图片描述

  

2.3 结果排序

  结果排序通常使用SQL中的order by子句来实现,它允许用户指定一个或多个列作为排序依据,并可以选择升序(ASC)或降序(DESC)排序。

asc 为升序(从小到大)
desc 为降序(从大到小)
//默认为 ASC
select ... from table_name [where ...]
order by column [asc|desc], [...];

  

按照数学成绩的升序进行排序:

select name,math from test2 order by math;

在这里插入图片描述

  

按照英语成绩的降序进行排序:

select name,math,english from test2 order by english desc

在这里插入图片描述
  

按照英语成绩的降序、数学成绩的升序进行排序:

select name,math,english from test2 order by english desc,math;

在这里插入图片描述
  

按照总分进行降序排序:

select name,chinese+english+math 
from test2 
order by chinese+english+math desc;

在这里插入图片描述

  

order by 子句中可以使用列别名:

select name,chinese+english+math 总分 from test2 order by 总分 desc;

在这里插入图片描述

  

2.4 筛选分页结果

  MySQL对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死。

//起始下标为 0
//从 s 开始,筛选 n 条结果
select ... from table_name [where ...] [order by ...] limit s, n//从 0 开始,筛选 n 条结果
select ... from table_name [where ...] [order by ...] limit n;//从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
select ... from table_name [where ...] [order by ...] limit n offset s;

  

查看表中的信息从第0条数据开始,筛选3条数据:

select id,name,chinese,math,english 
from test2 
order by id 
limit 3 offset 0;

在这里插入图片描述
  

3. Update(更新)

  update是一个数据库SQL语法用语,主要用来更新表中原有的数据。

  其基本的语法结构是:update 表名称 set 列名称 = 新值 where 列名称 = 某值。这意味着,当我们想要修改某个表中的特定数据时,可以使用update语句,并通过where子句来指定需要更新的行。

update table_name set column = expr [, column = expr ...]
[where ...] [order Bby ...] [limit ...]

  

3.1 更新单个数据

将李华的英语成绩更改为70:

select name,english from test2 where id=7;

在这里插入图片描述

update test2 set english=70 where id=7;
select name,english from test2 where id=7;

在这里插入图片描述

  

3.2 更新多个数据

将张三的语文成绩更改为75,英语成绩更改为65:

select name,chinese,english from test2 where id=1;

在这里插入图片描述

update test2 set chinese=75,english=65 where id=1;
select name,chinese,english from test2 where id=1;

在这里插入图片描述

  

4. Delete(删除)

  DELETE操作是数据库中的一种重要操作,用于删除表中的记录。

delete from table_name [where ...] [order by ...] [limit ...]

  

删除李华的成绩信息:

在这里插入图片描述

delete from test2 where id=7 ;

在这里插入图片描述

  

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

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

相关文章

如何保证消息的可靠传输

数据的丢失问题&#xff0c;可能出现在生产者、MQ、消费者中 生产者丢失&#xff1a; 生产者将数据发送到 RabbitMQ 的时候&#xff0c;可能数据就在半路给搞丢了&#xff0c;因为网络问题啥的&#xff0c;都有可能。此时可以选择用 RabbitMQ 提供的事务功能&#xff0c;就是生…

Unmanaged PowerShell

简介 在渗透测试当中经常会使用到PowerShell来执行脚本, 但是直接使用PowerShell.exe是一个非常敏感的行为, EDR等产品对PowerShell.exe进程的创建监控的很密切, 并且随着PowerShell的渗透测试工具的普及, 越来越多的EDR会利用微软提供的AMSI接口对PS脚本进行扫描, 但是对于低…

vue实现购物车功能

实现功能 CSS部分 <style>.tr {display: flex;}.th {margin: 10px;width: 20%;height: 50%;}.td {display: flex;margin: 10px;width: 20%;height: 100px;align-items: center;}.app-container .banner-box {border-radius: 20px;overflow: hidden;margin-bottom: 10px;}…

input中文输入法导致的高频事件

这是基本结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>中文输入法的高频事件</title&…

以题为例 浅谈前缀和算法

前缀求和算法是什么 前缀和算法就是以空间去换取时间&#xff0c;可用于快速求数组的区间和&#xff0c;它可以用于一维数组和二维数组&#xff0c;但我现在只接触了一维数组并没有接触二维数组&#xff0c;所以在这里先介绍一维数组前缀和相关的知识 前缀和典型代码 for(int…

通信-CAN-01 总线拓扑

本文主要介绍CAN总线拓扑&#xff0c;并结合实际用到CAN设备做些说明。 1 总线拓扑 拓扑结构中分为CPU&#xff0c;CAN 控制器&#xff0c;收发器&#xff0c;双绞线。CAN控制器根据两根线上的电位差来判断总线电平。发送方通过使总线发生变化&#xff0c;将消息发送给接收方…

BPSK调制解调

BPSK数字调制是相移键控PSK的一种&#xff0c;通过数字信号&#xff0c;调制载波的相位&#xff0c;利用载波的相位变化来反映数字信号&#xff0c;载波的振幅和频率均不变化。PSK应用很广泛&#xff0c;抗噪声性能比ASK和FSK要好&#xff0c;频带利用率较高。BPSK中&#xff0…

探讨:C#运行程序文件并获取输出的小问题

尝试了一下用C#运行一个控制台程序&#xff0c;希望获取输出并在适当的时候输入&#xff0c;看起来挺简单&#xff0c;不过实际使用发现只能让程序一次性执行完毕并获取输出&#xff08;并没有仔细尝试各种方式&#xff09;。 代码很简单&#xff1a; private void Test(){Proc…

Java实战:Spring Boot 利用 Redis 解决海量重复提交问题

本文将详细介绍如何在 Spring Boot 应用程序中利用 Redis 解决海量重复提交问题。我们将深入探讨重复提交问题的原因和影响&#xff0c;以及如何使用 Redis 的数据结构和原子操作来控制请求的重复提交。 1. 引言 在现代的互联网应用中&#xff0c;用户可能会频繁地提交相同的…

前端文件流、切片下载和上传

前端文件流、切片下载和上传技术在提升文件传输效率和优化用户体验方面发挥着关键作用。这些技术不仅可以帮助解决大文件传输过程中可能遇到的问题&#xff0c;如网络超时、内存溢出等&#xff0c;还能通过并行传输和断点续传等功能&#xff0c;提高传输速度和稳定性。 一、前端…

C++高级面试提:请解释 C++ 中的指针算术和指针迭代器的区别。

请解释 C 中的指针算术和指针迭代器的区别。 在 C 中&#xff0c;指针算术&#xff08;Pointer Arithmetic&#xff09;和指针迭代器&#xff08;Pointer Iterators&#xff09;是处理指针的两种不同方法。 指针算术&#xff08;Pointer Arithmetic&#xff09;&#xff1a; …

webpack5基础--07_自动清空上次打包资源

自动清空上次打包资源 1. 配置 const path require("path");module.exports {entry: "./src/main.js",output: {path: path.resolve(__dirname, "dist"),filename: "static/js/main.js",clean: true, // 自动将上次打包目录资源清…

每日学习笔记:C++ 11的Tuple

#include <tuple> Tuple介绍(不定数的值组--可理解为pair的升级版) 定义 创建 取值 初始化 获取tuple元素个数、获取tuple某元素类型、将2个tuple类型串接为1个新tuple类型

解决Ubuntu 16.04/18.04 图形化界面异常、鼠标光标消失、鼠标变成叉叉等问题

bug场景&#xff1a; 一切从一次换源说起…叭叭叭 这篇文章解决的问题&#xff1a; 1.换源&#xff0c;默认源太慢&#xff0c;换成可用的阿里云的源 2.apt-get failed to …问题 3.图形化异常问题 4.get unmet dependence 问题 5. 鼠标光标消失和鼠标变成叉叉问题。 解决方…

【Python】time模块

专栏文章索引&#xff1a;Python 目录 一、介绍​编辑 二、常用函数​编辑 一、介绍 Python 的 time 模块提供了处理时间的函数。 二、常用函数 1.time()&#xff1a;返回当前时间的时间戳&#xff08;从1970年1月1日开始计时的秒数&#xff09;。 import timecurrent_ti…

Android Gradle 开发与应用 (五) : 基于Gradle 8.2,创建Gradle插件

1. 前言 本文介绍在Android中&#xff0c;如何基于Gradle 8.2&#xff0c;创建Gradle插件。 1.1 本文环境 Android Studio 版本 : Android Studio Hedgehog | 2023.1.1Gralde版本 : gradle 8.2 使用 Android Gradle 插件升级助理 Android Gradle 插件版本说明 1.2 为什么要写…

蓝桥杯递推与递归法|斐波那契数列|数字三角形|42点问题|数的计算|数的划分(C++)

递归是用来做dfs&#xff0c;是搜索算法的基础 递推是用来做dp部分&#xff0c;及部分其他算法&#xff0c;复杂度较低&#xff0c;不会出现爆栈问题递推法&#xff1a; 递推法是一种在数学和其他领域广泛应用的重要方法&#xff0c;它在计算机科学中被用作一种关键的数值求解…

无源元器件-电阻电容磁珠电感选型参数总

🏡《总目录》 目录 1,概述2,电阻选型参数2,电容选型参数3,磁珠选型参数4,电感选型参数1,概述 无源器件(电阻、电容、电感)的选型时,需要考虑的参数多种多样,这些参数的选择会直接影响到电路的性能、稳定性、成本等多个方面。本文对电阻电容磁珠电感的参数进行详细介…

LLM 推理优化探微 (3) :如何有效控制 KV 缓存的内存占用,优化推理速度?

编者按&#xff1a; 随着 LLM 赋能越来越多需要实时决策和响应的应用场景&#xff0c;以及用户体验不佳、成本过高、资源受限等问题的出现&#xff0c;大模型高效推理已成为一个重要的研究课题。为此&#xff0c;Baihai IDP 推出 Pierre Lienhart 的系列文章&#xff0c;从多个…

C/C++指针详解

接下来我们来介绍一下什么是指针&#xff1f; 指针其实就是元素存放地址&#xff0c;更加形象的比喻&#xff1a;在酒店中如果你想要去注必须去付费不然不能住&#xff0c;在计算机也同样如此&#xff08;但是不需要付费哦&#xff09;每当我们使用一个变量或其他需要申请空间…