当前位置: 首页 > news >正文

【MySQL】数据操作

数据操作

  • 一、INSERT
    • 1、介绍
    • 2、语法
    • 3、语法介绍
    • 4、注意事项
    • 5、示例
  • 二、插入否则更新
    • 1、介绍
    • 2、语法
    • 3、语法介绍
    • 4、示例
  • 三、ROW_COUNT
    • 1、介绍
    • 2、示例
  • 四、REPLACE
    • 1、介绍
    • 2、语法
    • 3、示例
  • 五、UPDATE
    • 1、介绍
    • 2、语法
    • 3、示例
  • 六、DELETE
    • 1、介绍
    • 2、语法
    • 3、语法介绍
  • 七、TRUNCATE
    • 1、介绍
    • 2、语法
    • 3、注意事项
    • 4、与DELETE的比较

一、INSERT

1、介绍

  • 在MySQL中,INSERT语句用于向表中添加新记录。它是SQL(结构化查询语言)中用于数据插入的基本命令之一。通过INSERT语句,你可以将单行或多行数据插入到指定的表中。

2、语法

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1_1, value2_1, value3_1, ...)[,(value1_2, value2_2, value3_2, ...),...];

3、语法介绍

  • table_name:要插入数据的表的名称。
  • (column1, column2, column3, …):希望插入数据的列的名称,列的顺序应与VALUES子句中的值顺序相匹配。
  • (value1, value2, value3, …):与列对应的值。
  • 当插入多行数据时,插入的每行数据用逗号分隔。上方语法中[]部分。
  • 当插入所有列的数据时,如果列的顺序与表定义中的顺序一致,可以省略列名(column部分可以省略)。但需要为表中的所有列提供值,并且值的顺序必须与表中列的顺序一致。

4、注意事项

  • 如果表中有AUTO_INCREMENT列(例如,主键列),可以在INSERT语句中省略该列,MySQL会自动为该列生成一个唯一的值。
  • 如果表中有NOT NULL约束的列,并且这些列没有默认值,必须在INSERT语句中为这些列提供值。
  • 如果列允许NULL值,并且希望在插入时将这些列设置为NULL,可以在VALUES子句中显式地指定NULL。
  • 对于字符串和日期类型的值,应该将它们用单引号括起来。

5、示例

create table students(
id int unsigned primary key auto_increment,
sn int unique key not null comment '学号',
name varchar(20) not null
);insert into students values(1, 1234, '雪龙');
insert into students (sn, name) values(4567, '林黛玉'), (88994, '贾宝玉');select * from students;

在这里插入图片描述

二、插入否则更新

1、介绍

  • 当想要向表中插入新记录,但如果记录已经存在(基于某些唯一性约束,如主键或唯一索引),则希望更新该记录时,可以使用INSERT … ON DUPLICATE KEY UPDATE语句。这个语句允许在尝试插入新记录时,如果发生主键或唯一索引冲突,则执行更新操作而不是插入。
  • ON DUPLICATE KEY UPDATE仅当发生主键或唯一索引冲突时才会触发。即它是基于主键或唯一索引的。如果表中没有主键或唯一索引,则此语句将始终执行插入操作,即使记录已经存在。
  • 可以更新多个列,只需在ON DUPLICATE KEY UPDATE子句中为每个要更新的列指定新值。
  • 如果不希望更新某些列,可以省略它们。如果尝试更新的列有NOT NULL约束且没有提供非NULL值,则更新操作将失败。
  • 如果表中有触发器(Triggers),则ON DUPLICATE KEY UPDATE可能会触发这些触发器。

2、语法

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...)
ON DUPLICATE KEY UPDATE
column1 = VALUES(column1),
column2 = VALUES(column2),
...;

3、语法介绍

  • ON DUPLICATE KEY UPDATE:当发生主键或唯一索引冲突时要执行的更新操作。
  • column1 = VALUES(column1):将冲突行的列更新为尝试插入的值。VALUES函数用于引用INSERT语句中提供的值。

4、示例

在这里插入图片描述

  • 上方的前两条语句的执行结果分别是插入、更新操作,最后的语句因为要更新的值和插入的值(重复值)相同,不做修改。

三、ROW_COUNT

1、介绍

  • ROW_COUNT是一个函数,用于返回最近执行的 SQL 语句所影响的行数。这个函数在需要获取受影响的行数时非常有用,比如在插入、更新或删除操作后,可以使用它来确认有多少行被影响。
  • ROW_COUNT返回的是当前会话中最近一次执行的 DML(数据操作语言)语句所影响的行数。如果在不同的会话中执行语句,那么每个会话的 ROW_COUNT将只反映该会话中的操作。
  • 在事务中,ROW_COUNT仍然有效,但在回滚事务后,之前的 ROW_COUNT结果将不再反映实际影响行数。
  • 在存储过程和触发器中,ROW_COUNT也可以用来获取受影响的行数,有助于控制逻辑流。

2、示例

  • 下方示例是在上方示例执行后执行的。

在这里插入图片描述

四、REPLACE

1、介绍

  • REPLACE语句与INSERT语句的语法非常相似,但在功能上有所不同。REPLACE语句会尝试将一条新记录插入到表中,但如果表中已经存在具有相同唯一键或主键的记录,则会先删除旧记录,再插入新记录。
  • REPLACE语句会改变表中的自增长ID值,并可能影响关联表的数据一致性(如果存在外键约束)。因此,在使用时需要谨慎考虑数据完整性和性能问题。

2、语法

REPLACE INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);REPLACE INTO table_name
SET column1 = value1, column2 = value2, ...;

3、示例

在这里插入图片描述

  • 第一次为表中没有冲突数据,数据被插入。第二次为表中有冲突数据,删除后重新插入。

五、UPDATE

1、介绍

  • UPDATE 语句用于修改已存在的表中的数据。通过使用 UPDATE 语句,可以根据指定的条件(通常是通过 WHERE 子句)来更新一行或多行的数据。如果未使用 WHERE 子句,则会更新表中的所有行,但这通常是不希望发生的情况。
  • 在执行大规模更新操作之前,最好备份数据,以防操作错误导致数据丢失。确保 WHERE 子句正确无误,以防止意外更新大量数据。
  • 如果涉及多条更新语句,可以考虑使用事务管理,以确保数据的一致性。

2、语法

UPDATE 表名
SET1 =1,2 =2, ...
WHERE 条件;

3、示例

  • 本次以及下面的示例中,所用的exam_result表以及数据参见【MySQL】基本查询。因为本文与该文章拆分,所以本文示例所用的数据在该文中定义。

将贾政同学的语文成绩变更为80分

update exam_result set chinese=80 where name='贾政';
select name, chinese from exam_result where name = '贾政';

在这里插入图片描述
将总成绩倒数前三的 3 位同学的数学成绩加上 30分

select name, chinese+math+english total, math from exam_result order by total limit 3;

在这里插入图片描述

update exam_result set math=math+30 order by chinese+math+english limit 3;
select * from exam_result;

在这里插入图片描述

六、DELETE

1、介绍

  • DELETE语句用于从数据库表中删除记录。在执行删除操作之前,最好先备份数据库,以防误删重要数据。确保WHERE子句正确无误,以防止意外删除大量数据。确保删除操作不会导致数据不一致或违反业务规则。
  • 删除大量数据时,应考虑索引的使用和锁定机制的影响。对于大批量删除操作,可以考虑将删除分批进行,每批删除后手动提交事务,避免长时间锁表。

2、语法

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM table_name [WHERE condition] [ORDER BY ...] [LIMIT row_count];

3、语法介绍

  • LOW_PRIORITY:如果指定了LOW_PRIORITY选项,那么DELETE操作会被推迟,直到没有其他客户端正在从该表中读取数据为止。
  • QUICK:仅适用于MyISAM存储引擎,删除操作不会合并删除表的索引端节点,从而加快删除速度。
  • IGNORE:如果指定了IGNORE选项,那么在遇到错误时(如外键约束冲突),DELETE操作不会中断,而是会发出警告。
  • table_name:要删除记录的表的名称。
  • WHERE condition:可选的,用来指定应该删除哪些行。如果没有WHERE子句,那么表中的所有行都会被删除。
  • ORDER BY …:可选的,用来指定删除行的顺序。
  • LIMIT row_count:可选的,用来限制最多删除多少行。

七、TRUNCATE

1、介绍

  • TRUNCATE语句是一种用于快速删除表中所有数据的SQL命令。它通过释放表的存储空间来快速删除所有数据,而不会逐行删除数据。这使得TRUNCATE在处理大型表时比DELETE语句更快。
  • 使用TRUNCATE语句删除数据后,表结构、索引、约束等都会保持不变。删除的数据无法恢复,因为它不会记录每行的删除操作在事务日志中。因此,在执行TRUNCATE操作之前需要谨慎。
  • 如果表中有自增字段,TRUNCATE会将自增字段重置为初始值。

2、语法

TRUNCATE TABLE table_name;

3、注意事项

  • 外键约束:如果表有外键引用,TRUNCATE可能会失败,除非删除引用的外键关系。在某些情况下,如果外键约束被定义为级联删除,则TRUNCATE可能会成功删除所有相关表的数据。但通常建议在外键约束存在的情况下谨慎使用TRUNCATE。
  • 事务处理:TRUNCATE语句是一个DDL(Data Definition Language)语句,它会自动提交事务,并且无法回滚。

4、与DELETE的比较

  • 速度:TRUNCATE通常比DELETE更快,因为它不会记录每行的删除操作在事务日志中。
  • 恢复性:TRUNCATE删除的数据无法恢复,而DELETE可以通过日志进行回滚操作恢复数据。
  • 触发器:TRUNCATE不会触发DELETE触发器,而DELETE会。
  • 自增字段:TRUNCATE会重置自增列的表的标识符,而DELETE不会。

本文到这里就结束了,如有错误或者不清楚的地方欢迎评论或者私信
本文只是在学习过程中所做的总结,不会涉及过深的概念
创作不易,如果觉得博主写得不错,请点赞、收藏加关注支持一下💕💕💕

相关文章:

【MySQL】数据操作

数据操作 一、INSERT1、介绍2、语法3、语法介绍4、注意事项5、示例 二、插入否则更新1、介绍2、语法3、语法介绍4、示例 三、ROW_COUNT1、介绍2、示例 四、REPLACE1、介绍2、语法3、示例 五、UPDATE1、介绍2、语法3、示例 六、DELETE1、介绍2、语法3、语法介绍 七、TRUNCATE1、…...

python数据分析:使用pandas库读取和编辑Excel表

使用 Pandas,我们可以轻松地读取和写入Excel 文件,之前文章我们介绍了其他多种方法。 使用前确保已经安装pandas和 openpyxl库(默认使用该库处理Excel文件)。没有安装的可以使用pip命令安装: pip install pandas ope…...

开源轻量级文件分享服务Go File本地Docker部署与远程访问

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…...

异步背后的奥秘:事件循环

异步背后的奥秘:事件循环 复习环节 JavaScript运行时 我们都知道,JavaScript本身是一个单线程的,那JavaScript是如何处理同时发生的多个任务的呢? 首先JavaScript引擎运行在一个容器中,这个容器可能是浏览器或者nod…...

Springboot使用RabbitMQ实现关闭超时订单的一个简单示例

1.maven中引入rabbitmq的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 2.application.yml中进行rabbitmq相关配置&#xff1a; # rabbit…...

小程序基础 —— 07 创建小程序项目

创建小程序项目 打开微信开发者工具&#xff0c;左侧选择小程序&#xff0c;点击 号即可新建项目&#xff1a; 在弹出的新页面&#xff0c;填写项目信息&#xff08;后端服务选择不使用云服务&#xff0c;开发模式为小程序&#xff0c;模板选择为不使用模板&#xff09;&…...

【Golang 面试题】每日 3 题(十五)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…...

Docker命令(用法说明详解)

一、常见Docker容器命令 #根据image创建一个新容器并运行&#xff08;即使该image已经存在容器&#xff0c;也会再创建一个新容器&#xff09; docker run IMAGE_NAME #根据image创建一个新容器并运行。 #选项-d&#xff1a;指定容器为后台运行&#xff0c;--name自定义该容器…...

leetcode 热题100(131. 分割回文串)c++

链接&#xff1a;131. 分割回文串 - 力扣&#xff08;LeetCode&#xff09; 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1&#xff1a; 输入&#xff1a;s "aab" 输出&#xff…...

vs2022编译opencv 4.10.0

参考&#xff1a;Windosw下Visual Studio2022编译OpenCV与参考区别在于&#xff0c;没有用cmake GUI&#xff0c;也没有创建build目录&#xff0c;直接用vs2022打开了C:\code\opencv目录&#xff0c;即CMakeLists.txt所在根目录。没有修改默认下载地址&#xff0c;采用手动下载…...

Bash 中的 2>1 | tee 命令详解

Bash 中的 2>&1 | tee 命令详解 在 Linux 和 Unix 系统中&#xff0c;命令行提供了强大的输出控制功能&#xff0c;能够灵活地处理标准输入&#xff08;stdin&#xff09;、标准输出&#xff08;stdout&#xff09;和标准错误&#xff08;stderr&#xff09;。本文将详…...

MySQL数据库的日志

一、概论 日志&#xff08;log&#xff09;是一种记录系统运行时各种状态和事件的文件。 它通常用于系统监控、故障排查、安全审计和性能分析。日志文件可以记录用户操作、系统错误、应用程序行为等信息。日志文件通常包含时间戳、事件类型、事件描述等关键信息&#xff0c;以…...

DataCap 2024.4.1 版本发布:MongoDB 驱动支持、工作流引擎升级

尊敬的 DataCap 用户&#xff1a; DataCap 2024.4.1 版本现已正式发布。本次更新包含多项重要功能升级和性能优化&#xff0c;现将主要更新内容公布如下&#xff1a; 核心功能升级 数据库功能增强 (实现功能) 新增数据库管理功能&#xff1a;支持创建、删除和切换数据库完善表…...

二十三种设计模式-单例模式

单例模式&#xff08;Singleton&#xff09;&#xff1a;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 单例模式两种实现方法&#xff1a;懒汉式和饿汉式。 懒汉式&#xff08;Lazy Initialization&#xff09; 懒汉式单例模式在第一次被使用时才创建实例&…...

【微服务】SpringBoot 国际化适配方案使用详解

目录 一、前言 二、国际化概述 2.1 微服务中的国际化是什么 2.1.1 国际化概念 2.1.2 为什么需要国际化 2.2 微服务中常用的国际化方法 2.2.1 资源文件分离 2.2.2 使用国际化框架 2.2.3 使用动态模板 2.2.4 使用数据库存储 2.2.5 API设计结合配置中心 三、SpringBoot…...

太阳能电池板缺陷识别数据集,使用yolo,coco json,pasical voc xml格式标注,可识别旁路二极管,电池故障,热点,2234张原始图片

太阳能电池板缺陷识别数据集&#xff0c;使用yolo&#xff0c;coco json&#xff0c;pasical voc xml格式标注&#xff0c;可识别旁路二极管,电池故障,热点,2234张原始图片 以下是该项目的一些用例&#xff1a; 太阳能发电厂监控&#xff1a;该模型可用于自动化检查和识别大型…...

客户案例:基于慧集通平台集成打通小满CRM+金蝶云星空+钉钉

一、引言 本案例原型公司是一家生物科技公司&#xff0c;公司自开创以来专注于体外诊断生物活性原材料的研究、生产、销售和服务&#xff0c;致力于为全球体外诊断试剂生产企业提供领先且具有竞争力的核心原料和相关辅助产品服务。公司以卓越的产品和优质的服务赢得了客户的广…...

ubuntu 如何使用vrf

在Ubuntu或其他Linux系统中&#xff0c;您使用ip命令和sysctl命令配置的网络和内核参数通常是临时的&#xff0c;这意味着在系统重启后这些配置会丢失。为了将这些配置持久化&#xff0c;您需要采取一些额外的步骤。 对于ip命令配置的网络接口和路由&#xff0c;您可以将这些配…...

Debian-linux运维-ssh配置(兼容Jenkins插件的ssh连接公钥类型)

系统版本&#xff1a;Debian 12.5、11.1 1 生成密钥对 可以用云服务商控制台生成的密钥对&#xff0c;也可以自己在客户端或者服务器上生成&#xff0c; 已经有密钥对就可以跳过这步 用户默认密钥文件路径为 ~/.ssh/id_rsa&#xff0c;可以在交互中指定路径&#xff0c;也可…...

K8S详解(5万字详细教程)

目录 ​编辑 一、集群管理命令 二、命名空间 1. 获取命名空间列表 2. 创建命名空间 3. 删除命名空间 4. 查看命名空间详情 三、Pod 1. Pod概述 2. Pod相位状态 3. 管理命令 3.1 获取命名空间下容器(pod)列表 3.2 查看pod的详细信息 3.3 创建 && 运行 3.4 …...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...