6.MySQL的增删改查

news2024/11/26 14:25:56

目录

Create

单行插入数据 + 全列插入

多行数据+指定列插入

插入否则更新

主键冲突

唯一键冲突 (☆)

替换数据

Retrieve

Select列

全列查询

指定列查询

查询字段为表达式

where条件

NULL 的查询

NULL 和 NULL 的比较,= 和 <=> 的区别

 ​编辑结果排序 结果排序

筛选分页结果

Update

Delete

删除表

 截断表

插入查询结果


Create

INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...

案例:

mysql> create table t1(
    -> id int primary key auto_increment,
    -> sn int not null unique comment "学号",
    -> name varchar(20) not null,
    -> vx varchar(20)
    -> );

单行插入数据 + 全列插入

  • 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致

多行数据+指定列插入

  • 注意,这里在插入的时候,也可以不用指定id(当然,那时候就需要明确插入数据到那些列了),那么mysql会使用默认的值进行自增。
  • 插入两条记录,value_list 数量必须和指定列数量及顺序一致

使用insert语句也可以一次向表中插入多条记录,插入的多条记录之间使用逗号隔开,并且插入记录时可以只指定某些列进行插入。

说明一下: 在插入记录时,只有允许为空的列或自增长字段可以不指定值插入,不允许为空的列必须指定值插入,否则会报错。

插入否则更新

向表中插入记录时,如果待插入记录中的主键或唯一键已经存在,那么就会因为主键冲突或唯一键冲突导致插入失败。

主键冲突

唯一键冲突 (☆)

可以选择性的进行同步更新操作语法:

INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...

-- 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,并且数据已经被更新
-- 通过 MySQL 函数获取受到影响的数据行数
SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
| 2 |
+-------------+

替换数据

  • 主键或者唯一键没有冲突,则直接插入
  • 主键或者唯一键如果冲突,则删除后插入

1 row affected: 表中没有冲突数据,数据被插入
2 row affected: 表中有冲突数据,删除后重新插入

Retrieve

语法:

SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...

为了方便演示我们先创建一个表,包括自增长主键id,姓名以及该同学的语文、数学、英语成绩:

创建完表之后我们可以查看表结构:

查看完表结构之后,我们插入一些数据:

Select列

全列查询

通常情况下不建议使用 * 进行全列查询

  • 查询的列越多,意味着需要传输的数据量越大;
  • 可能会影响到索引的使用。

指定列查询

指定name

指定id,name

查询字段为表达式

表达式包含一个字段

表达式包含多个字段

为查询结果指定别名

SELECT column [AS] alias_name [...] FROM table_name;

结果去重

发现数学98重复了

where条件

添加where字句的区别:

  • 如果在查询数据时没有指定where子句,那么会直接将表中所有的记录作为数据源来依次执行select语句。

  • 如果在查询数据时指定了where子句,那么在查询数据时会先根据where子句筛选出符合条件的记录,然后将符合条件的记录作为数据源来依次执行select语句。

where子句中可以指明一个或多个筛选条件,各个筛选条件之间用逻辑运算符AND或OR进行关联,下面给出了where子句中常用的比较运算符和逻辑运算符。

  • 比较运算符:

>,>=,<,<=大于,大于等于,小于,小于等于
=等于,NULL不安全,例如NULL=NULL的结果是NULL,而不是TRUE(1)
<=>等于,NULL安全,例如NULL<=>NULL的结果是TURE(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)
OR任意一个条件为TRUE(1),结果为TRUE(1)
NOT条件为TRUE(1),结果为false(0)

等价于电路中的与或非

英语不及格的同学及英语成绩 ( < 60 )

语文成绩在 [80, 90] 分的同学及语文成绩
常规做法

between ..and..

查询数学成绩是58或59或98或99分的同学及其数学成绩

常规做法

in

分别查询姓孙的同学和孙某同学

查询姓孙的

查询孙某同学

查询语文成绩好于英语成绩的同学

总分在 200 分以下的同学

方式一:

方式二:

语文成绩 > 80 并且不姓孙的同学

孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80

NULL 的查询

NULL NULL 的比较,= <=> 的区别

 结果排序 结果排序

ASC 为升序(从小到大)

DESC 为降序(从大到小)

默认为 ASC

SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
同学及数学成绩,按数学成绩升序显示
id、同学名字、sn及 qq 号,按 qq 号排序显示
语法:
Select .......... from table_name [ where .......] order by [asc/desc];
降序排序
NULL 视为比任何值都小,降序出现在最下面

查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
查询同学及总分,由高到低

查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示

筛选分页结果

-- 起始下标为 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;

 筛选前三行

筛选 从3开始筛选5行

-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

从第0行开始,筛选3行 

 从第1行开始,筛选3行 

 

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

id 进行分页,每页 3 条记录,分别显示 第 1 2 3
SELECT id, name, math, english, chinese FROM exam_result
ORDER BY id LIMIT 3 OFFSET 0;
-- 1

-- 第 2 

-- 第 3  

Update

语法:

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
将孙悟空同学的数学成绩变更为 80
将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70

原始数据

跟新后的数据

将总成绩倒数前三的 3 位同学的数学成绩加上 30
先找到总成绩倒数前三的人
select name,math,chinese+math+english 总分 from exam_result order by 总分 limit 3;
update exam_result set math=math+30 order by math+chinese+english asc limit 3;

Delete

删除表

语法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
删除孙悟空同学的考试成绩
原始数据
删除操作后
删除整张表数据
注意:删除整表操作要慎用!

先准备一张表

插入1点数据

删除整表数据

查看删除结果

再插入一条数据,自增 id 在原值上增长

查看表结构,会有 AUTO_INCREMENT=n

 截断表

TRUNCATE [TABLE] table_name
注意:这个操作慎用
1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是 TRUNCATE 在删除数据的时候,并不经过真正的事物,所以无法回滚
3. 会重置 AUTO_INCREMENT
CREATE TABLE for_truncate (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);

INSERT INTO for_truncate (name) VALUES ('A'), ('B'), ('C');

再插入一条数据,自增 id 在重新增长

和delete对比一下

总结:truncate截断表会是自增长的重新开始,而delete不会重新开始

插入查询结果

INSERT INTO table_name [(column [, column ...])] SELECT ...
删除表中的的重复复记录,重复的数据只能有一份
 创建原数据表
mysql> CREATE TABLE duplicate_table (id int, name varchar(20));
Query OK, 0 rows affected (0.02 sec)

 插入测试数据
mysql> INSERT INTO duplicate_table VALUES
    -> (100, 'aaa'),
    -> (100, 'aaa'),
    -> (200, 'bbb'),
    -> (200, 'bbb'),
    -> (200, 'bbb'),
    -> (300, 'ccc');
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0
创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
mysql> CREATE TABLE no_duplicate_table LIKE duplicate_table;
Query OK, 0 rows affected (0.02 sec)
将 duplicate_table 的去重数据插入到 no_duplicate_table
mysql> INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

通过重命名表,实现原子的去重操作
mysql> RENAME TABLE duplicate_table TO old_duplicate_table,
    -> no_duplicate_table TO duplicate_table;
Query OK, 0 rows affected (0.03 sec)
查看最终结果
mysql> SELECT * FROM duplicate_table;
+------+------+
| id   | name |
+------+------+
|  100 | aaa  |
|  200 | bbb  |
|  300 | ccc  |
+------+------+
3 rows in set (0.00 sec)

mysql> 

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

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

相关文章

野蛮生长后,AI大模型还需要重复“造轮子”?

AI大模型带来的智能革命&#xff0c;媲美工业革命和电力革命&#xff0c;深刻改变人类社会的生产生活方式&#xff0c;是开启智能时代的那一台“蒸汽机”。 从文生文到文生图&#xff0c;再到文生视频&#xff0c;以ChatGPT、Sora等为代表的大模型引领了全球人工智能技术与产业…

《使用深度学习三分类模型预测胸部CT中的肺腺癌侵袭性》| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Predicting Invasiveness of Lung Adenocarcinoma at Chest CT with Deep Learning Ternary Classification Models 《使用深度学习三分类模型预测胸部CT中的肺腺癌侵袭性》 Background 背景 Preoperative discrimination of preinvasive, minimally invasive,…

开关电源之结构分析

如有技术问题及技术需求请加作者微信! 开关电源之结构分析 1、开关电源的结构 常用开关电源,主要是为电子设备提供直流电源供电。电子设备所需要的直流电压,范围一般都在几伏到十几伏,而交流市电电源供给的电压为220V(110V),频率为50Hz(60Hz)。开关电源的作用就是把一…

Surface Studio 曾经耀眼的骚气光芒至今依然

Surface Studio 曾经耀眼的骚气光芒至今依然 Surface Studio当时上市价格25988RMB&#xff0c;现在小黄鱼大概在3000的样子可以买到屏幕没有老化的那种。看着那块巨大的5K触摸屏&#xff0c;简直让人垂涎三尺欲罢不能。 一、卓越配置&#xff0c;尽显强大性能 Surface Studio…

freeRTOS之任务调度

本节课的内容是重中之重&#xff0c;对复习操作系统的任务调度也很有帮助。

API接口自定义字段返回,最终解决方案,再也不用写 vo、dto 转换逻辑了

西湖的晚霞真美啊 前言 此套方案太过完美&#xff0c;唯一缺点就是&#xff0c;字段返回基于反射操作&#xff0c;损失一点点性能 效果 API接口指定使用自定义增强注解MoreSerializeField&#xff0c;标注只返回 departName 字段 前端只会接收到 departName 字段 实现原理 …

Python爬虫——Selenium方法爬取LOL页面

文章目录 Selenium介绍用Selenium方法爬取LOL每个英雄的图片及名字 Selenium介绍 Selenium 是一个用于自动化Web应用程序测试的工具&#xff0c;但它同样可以被用来进行网页数据的抓取&#xff08;爬虫&#xff09;。Selenium 通过模拟用户在浏览器中的操作&#xff08;如点击…

进程间通信---管道通信、命名管道、匿名管道详解

什么是通信&#xff1f; 为什么要通信&#xff1f; 如何做到通信&#xff1f; 管道是什么&#xff1f; 管道用来干什么&#xff1f; 管道如何实现通信&#xff1f; 匿名管道是什么&#xff1f; 如何实现&#xff1f; 命名管道是什么&#xff1f; 如何实现&#xff1f; 什么是文…

探究 Element Plus Menu 横向多层级展开组件的 Bug 及解决方案

文章目录 1 ellipsis 是否省略多余的子项&#xff08;仅在横向模式生效&#xff09;问题描述解决方案 2 多个级别的子菜单位置错乱或默认直接展开问题描述解决方案1 index没有设置2 通用策略 1 ellipsis 是否省略多余的子项&#xff08;仅在横向模式生效&#xff09; 问题描述…

Global Structure-from-Motion Revisited golmap论文翻译

Global Structure-from-Motion Revisited Paper&#xff1a;https://demuc.de/papers/pan2024glomap.pdf Code&#xff1a;https://github.com/colmap/glomap 摘要- 从图像中恢复三维结构和摄像机运动一直是计算机视觉研究的热点&#xff0c;被称为运动结构恢复(SfM)。这个问…

【RAG提升技巧】查询改写HyDE

简介 提高 RAG 推理能力的一个好方法是添加查询理解层 ——在实际查询向量存储之前添加查询转换。以下是四种不同的查询转换&#xff1a; 路由&#xff1a;保留初始查询&#xff0c;同时查明其所属的适当工具子集。然后&#xff0c;将这些工具指定为合适的选项。查询重写&…

[论文笔记]ZeRO: Memory Optimizations Toward Training Trillion Parameter Models

引言 今天带来ZeRO: Memory Optimizations Toward Training Trillion Parameter Models的论文笔记。 大型深度模型提供了显著的准确性提升&#xff0c;但训练数十亿到数万亿个参数是具有挑战性的。现有的解决方案&#xff0c;如数据并行和模型并行&#xff0c;存在基本的局限…

汇昌联信做拼多多电商如何提升浏览量?

在拼多多电商平台上&#xff0c;如何提升商品的浏览量是每个卖家都关注的问题。高浏览量不仅意味着更多的潜在客户&#xff0c;还能间接提升销量和店铺的知名度。汇昌联信作为电商运营者&#xff0c;需要采取有效策略来吸引消费者的注意力。 一、优化商品标题和描述 商品标题是…

LDR6328Q:重塑电源管理新境界的取电芯片

在电子设备日益普及的今天&#xff0c;高效、智能的电源管理成为了提升用户体验的关键因素之一。而LDR6328Q作为一款专为设备端设计的取电芯片&#xff0c;凭借其出色的性能和创新的技术&#xff0c;正逐步成为电源管理领域的一颗璀璨新星。本文将深入探讨LDR6328Q取电芯片的特…

大模型面经,不要到处找了,收藏我这一篇就够了

在当前技术快速发展的背景下&#xff0c;大模型领域的职位成为了许多求职者的热门选择。为了帮助大家更好地准备面试&#xff0c;这里整理了一份大模型面试经验分享&#xff0c;涵盖了一些常见的面试流程、可能遇到的技术问题以及面试官可能会问到的行为问题等。 大模型面试经…

什么是实时数据仓库? 优势与最佳实践

在当今数据驱动的世界中&#xff0c;许多企业使用实时数据仓库来满足其分析和商业智能 (BI) 需求。这使他们能够做出更好的决策、推动增长并为客户提供价值。 数据仓库是一种数据存储和管理系统&#xff0c;其设计目标只有一个&#xff1a;管理和分析数据&#xff0c;以实现商…

链表求和问题(面试题)

目录 一题目&#xff1a; 二思路汇总&#xff1a; 三解答代码&#xff1a; 一题目&#xff1a; leetcode题目链接 &#xff1a;面试题 02.05. 链表求和 - 力扣&#xff08;LeetCode&#xff09; 二思路汇总&#xff1a; 想到这道题&#xff0c;可能看起来第一思路就是把它们…

【C++二分查找】2563. 统计公平数对的数目

本文涉及的基础知识点 C二分查找 LeetCode2563. 统计公平数对的数目 给你一个下标从 0 开始、长度为 n 的整数数组 nums &#xff0c;和两个整数 lower 和 upper &#xff0c;返回 公平数对的数目 。 如果 (i, j) 数对满足以下情况&#xff0c;则认为它是一个 公平数对 &…

利用住宅代理优化媒体监控,全面提升品牌管理与市场竞争力

引言 什么是媒体监控&#xff1f;主要用于哪里&#xff1f; 媒体监控面临的主要挑战 住宅代理在媒体监控中的作用 如何利用住宅代理进行媒体监控 总结 引言 在信息化时代&#xff0c;媒体监控&#xff08;media monitoring&#xff09;已成为企业进行品牌声誉管理、市场研…

喵喵蓝牙热敏打印机(下)

目录 前言一、电量、温度、缺纸检测1.电量检测2.针头温度检测3.缺纸检测 二、蓝牙APP通信打印1.蓝牙初始化2.APP通信打印 三、FreeRTOS任务整合 前言 喵喵蓝牙热敏打印机&#xff08;上&#xff09; 内容有点多&#xff0c;就分为了上下两篇。 一、电量、温度、缺纸检测 先启…