【MySQL】增删改操作(基础篇)

news2024/11/15 23:25:15

 

目录

1、新增操作(Create) 

1.1 单行数据 + 全列插入

1.2 多行数据 + 全列插入

1.3 单行数据 + 指定列插入

2、修改操作(Update)

3、删除操作(Delete)


1、新增操作(Create) 

如何给一张表新增数据呢? 新增(Create),在我们数据库中,用 insert into 来进行新增操作,首先我们需要有一张表:

create table student (
    id int,
    name varchar(10),
    sex varchar(2)
);

现在我们就对这个 student 这个表进行增加数据的操作。

1.1 单行数据 + 全列插入

这个意思就是,一次只插入一行,每一列都会插入数据,不存在没有不插入数据的列:

insert into student values(1, '张三', '男');

这样我们就插入了一条语句了,这里也可以用 value 不用 values,使用 value 在一次性插入多行的时候效率更优,而 values 在只插入一行的时候速度更优,所以不要看到有一个 s 就表示多行就更快了,其实是反着的。

1.2 多行数据 + 全列插入

如果一次性我有很多行数据想要插入,每列都要插入数据,如何做呢?

insert into student value 
    (2, '小美', '女'),
    (3, '赵六', '男');
-- Query OK, 2 rows affected (0.00 sec)
-- Records: 2  Duplicates: 0  Warnings: 0

这里通过 mysql 客户端给出的信息,也能看到我们成功插入了 2 行数据了。

1.3 单行数据 + 指定列插入

在我们这个 student 表中,所有的列都是允许为空值的,也就是表示该列中可以不填任何数据,如果我们要插入 李四,而 李四又 不想告诉别人他的性别,那我们就可以不用给 李四 插入性别那一列了:

insert into student (id, name) values (4, '李四');
-- Query OK, 1 row affected (0.00 sec)

那里面 sex 这一列没有被填充怎么办呢?那肯定就是用默认值去填充了!我们这里就是 NULL:

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| sex   | varchar(2)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
-- 3 rows in set (0.00 sec)

注意:values () 括号中的内容,个数和类型一定要和表的结构匹配!如果是指定列插入,试具体情况而定!

insert into student(id, name) values(1, '张三', '男');
-- ERROR 1136 (21S01): Column count doesn't match value count at row 1

就比如说,我指定插入 id 和 name 这两列,但是我插入了三列,这样就会报错!多行数据 + 指定列插入也是如此,这里就在讲述了。


2、修改操作(Update)

很多同学在学习阶段不重视修改操作,导致在面试的时候连修改的 SQL 是写错的,所以增删改查,一个都不能少!

语法: 

update 表名 set 列名 = 值 where 条件;

 我们先来看下表中有哪些数据:

select * from student;
+------+--------+------+-------+--------+
| id   | name   | sex  | java  | python |
+------+--------+------+-------+--------+
|    1 | 张三   | 男   | 88.20 |  87.90 |
|    2 | 李四   | 男   | 92.50 |  78.20 |
|    3 | 小美   | 女   | 80.90 |  68.60 |
|    4 | 小花   | 男   | 97.00 |  71.30 |
|    5 | 李四   | 男   |  NULL |   NULL |
|    6 | 小花   | 女   |  NULL |   NULL |
+------+--------+------+-------+--------+
-- 6 rows in set (0.02 sec)

● 这里 python 老师觉得有些同学分数太低,决定把 python 分数低于 80 分的同学加上 5 分:

update student set python = python + 5 where python < 80;
-- Query OK, 3 rows affected (0.00 sec)
-- Rows matched: 3  Changed: 3  Warnings: 0

mysql> select * from student;
+------+--------+------+-------+--------+
| id   | name   | sex  | java  | python |
+------+--------+------+-------+--------+
|    1 | 张三   | 男   | 88.20 |  87.90 |
|    2 | 李四   | 男   | 92.50 |  83.20 |
|    3 | 小美   | 女   | 80.90 |  73.60 |
|    4 | 小花   | 男   | 97.00 |  76.30 |
|    5 | 李四   | 男   |  NULL |   NULL |
|    6 | 小花   | 女   |  NULL |   NULL |
+------+--------+------+-------+--------+
-- 6 rows in set (0.00 sec)

这里我们发现 id 为 2,id 为 3, id 为 4,的同学 python 分数都加了 5 分,而后面两个 python 成绩为 NULL 的同学为什么没有加呢?前面不是说过 NULL 是最小值吗?但是这里我们注意,NULL 是最小值,但是 NULL 是无法进行算数运算的!

注意:update 操作是实际在修改服务器硬盘上的数据!

● 将所有同学的 java 成绩减少 5 分:

update student set java = java - 5;
-- Query OK, 4 rows affected (0.00 sec)
-- Rows matched: 6  Changed: 4  Warnings: 0

mysql> select * from student;
+------+--------+------+-------+--------+
| id   | name   | sex  | java  | python |
+------+--------+------+-------+--------+
|    1 | 张三   | 男   | 83.20 |  87.90 |
|    2 | 李四   | 男   | 87.50 |  83.20 |
|    3 | 小美   | 女   | 75.90 |  73.60 |
|    4 | 小花   | 男   | 92.00 |  76.30 |
|    5 | 李四   | 男   |  NULL |   NULL |
|    6 | 小花   | 女   |  NULL |   NULL |
+------+--------+------+-------+--------+
-- 6 rows in set (0.00 sec)

上述可以发现,如果 update 后面不加 where 条件的话,默认就是对指定列的每一行都匹配上了!仍然还是有空值,因为空值是无法进行算数运算的!

注意:这里的 java = java - 5,一定不要写成 java -= 5,因为 SQL 是一门比较老的语言,很多的语法细节和 Java 啥的还是差别比较大的。

● 如果小美考试作弊了,被老师发现了,每一科的成绩都将按照 0 分进行处理,这时我们 update 也可以同时去修改多个列:

update student set java = 0, python = 0 where name = '小美';
-- Query OK, 1 row affected (0.00 sec)
-- Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from student;
+------+--------+------+-------+--------+
| id   | name   | sex  | java  | python |
+------+--------+------+-------+--------+
|    1 | 张三   | 男   | 83.20 |  87.90 |
|    2 | 李四   | 男   | 87.50 |  83.20 |
|    3 | 小美   | 女   |  0.00 |   0.00 |
|    4 | 小花   | 男   | 92.00 |  76.30 |
|    5 | 李四   | 男   |  NULL |   NULL |
|    6 | 小花   | 女   |  NULL |   NULL |
+------+--------+------+-------+--------+
-- 6 rows in set (0.00 sec)

● 学校为了避免同学们成绩相差过大而失去信心,现需将总分为前两名同学每科成绩降低 3 分:

update student set java = java - 3, python = python - 3 order by java + python desc limit 2;
-- Query OK, 2 rows affected (0.00 sec)
-- Rows matched: 2  Changed: 2  Warnings: 0

这个 SQL 执行是这样的,先按照总分进行降序排序,然后再只选取两个,由于没有 where 条件,所以匹配的是对应列所有行,但是由于 limit 2,限制了只有 2 行,所以就能达到针对前两名的总分减 3 了:

mysql> select * from student;
+------+--------+------+-------+--------+
| id   | name   | sex  | java  | python |
+------+--------+------+-------+--------+
|    1 | 张三   | 男   | 80.20 |  84.90 |
|    2 | 李四   | 男   | 84.50 |  80.20 |
|    3 | 小美   | 女   |  0.00 |   0.00 |
|    4 | 小花   | 男   | 92.00 |  76.30 |
|    5 | 李四   | 男   |  NULL |   NULL |
|    6 | 小花   | 女   |  NULL |   NULL |
+------+--------+------+-------+--------+
-- 6 rows in set (0.00 sec)

通过查询修改后的,发现确实总分前两名的同学每科成绩都减少了 3 分。

对于 update 操作,我们也需要谨慎,update 中的条件,务必保证要是正确的,千万不能把不该改的数据给改了!!!


3、删除操作(Delete)

delete from 表名 where 条件;

● 删除 java 成绩或者 python 成绩为 NULL 的同学信息:

delete from student where java <=> NULL or python <=> NULL;
-- Query OK, 2 rows affected (0.01 sec)

mysql> select * from student;
+------+--------+------+-------+--------+
| id   | name   | sex  | java  | python |
+------+--------+------+-------+--------+
|    1 | 张三   | 男   | 80.20 |  84.90 |
|    2 | 李四   | 男   | 84.50 |  80.20 |
|    3 | 小美   | 女   |  0.00 |   0.00 |
|    4 | 小花   | 男   | 92.00 |  76.30 |
+------+--------+------+-------+--------+
-- 4 rows in set (0.00 sec)

注意 :删除操作也是在操作数据库服务器的硬盘,需要小心! 

delete 的操作,后面的条件是可以跟 update 一样的,支持 where,order by,limit 等操作。

如果没有写任何条件,那就是把整个表中的数据都删除了:

delete from student;
-- Query OK, 4 rows affected (0.00 sec)

select * from student;
-- Empty set (0.00 sec)

对于这两期的内容来说,并没有什么难点,需要是多加练习,熟悉 SQL 的语法,不要去记忆一些关键字,一定要孰能生巧,你敲多了,自然就记住了!


下期预告:【MySQL】查询操作(基础篇)

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

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

相关文章

三行代码让你的git记录保持整洁

前言笔者最近在主导一个项目的架构迁移工作&#xff0c;由于迁移项目的历史包袱较重&#xff0c;人员合作较多&#xff0c;在迁移过程中免不了进行多分支、多次commit的情况&#xff0c;时间一长&#xff0c;git的提交记录便混乱不堪&#xff0c;随便截一个图形化的git提交历史…

location

目录 匹配的目标 格式 匹配符号&#xff1a; 优先级 要表达不匹配条件&#xff0c;则用 if 实现 例子&#xff1a;根目录的匹配最弱 例子&#xff1a;区分大小写 和 不区分大小写 例子&#xff1a;以根开头 和 不区分大小写 例子&#xff1a;等号 匹配的目标 ng…

Vue2.0开发之——使用ref引用组件实例(41)

一 概述 在本组件内部修改count的值在父组件内修改子组件的count值 二 在本组件内部修改count的值 2.1 Left.vue 布局代码 <template><div class"left-container"><h3 >Left 组件---{{count}}</h3><button click"count 1"&…

团队:在人身上,你到底愿意花多大精力?

你好&#xff0c;我是叶芊。 今天我们讨论怎么带团队这个话题&#xff0c;哎先别急着走&#xff0c;你可能跟很多人一样&#xff0c;觉得带团队离我还太远&#xff0c;或者觉得我才不要做管理&#xff0c;我要一路技术走到底&#xff0c;但是你知道吗&#xff1f;带团队做事&am…

华为OD机试用Python实现 -【MVP 争夺战】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲MVP 争夺战题目描述输入描述输出描述示例一输入输出说明Python 代码实现代码实现思路华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell…

​AAAI 2023 | 利用脉冲神经网络扩展动态图表示学习

©PaperWeekly 原创 作者 | 李金膛单位 | 中山大学博士生研究方向 | 可信图学习2020 年国家双碳战略的确立与实施&#xff0c;绿色低碳已经成为全社会的重要议题&#xff0c;也是科技从业者的重要使命和责任。有文献指出&#xff0c;从 2012 年到 2018 年&#xff0c;用于…

CountDownLatch与CyclicBarrier原理剖析

1.CountDownLatch 1.1 什么是CountDownLatch CountDownLatch是一个同步工具类&#xff0c;用来协调多个线程之间的同步&#xff0c;或者说起到线程之间的通信&#xff08;而不是用作互斥的作用&#xff09;。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之…

分布式算法 - Snowflake算法

Snowflake&#xff0c;雪花算法是由Twitter开源的分布式ID生成算法&#xff0c;以划分命名空间的方式将 64-bit位分割成多个部分&#xff0c;每个部分代表不同的含义。这种就是将64位划分为不同的段&#xff0c;每段代表不同的涵义&#xff0c;基本就是时间戳、机器ID和序列数。…

注意力机制详解系列(二):通道注意力机制

&#x1f468;‍&#x1f4bb;作者简介&#xff1a; 大数据专业硕士在读&#xff0c;CSDN人工智能领域博客专家&#xff0c;阿里云专家博主&#xff0c;专注大数据与人工智能知识分享。 &#x1f389;专栏推荐&#xff1a; 目前在写CV方向专栏&#xff0c;更新不限于目标检测、…

锁屏面试题百日百刷-Hive篇(三)

锁屏面试题百日百刷&#xff0c;每个工作日坚持更新面试题。锁屏面试题app、小程序现已上线&#xff0c;官网地址&#xff1a;https://www.demosoftware.cn/#/introductionPage。已收录了每日更新的面试题的所有内容&#xff0c;还包含特色的解锁屏幕复习面试题、每日编程题目邮…

函数库Rollup构建优化

本节涉及的内容源码可在vue-pro-components c7 分支[1]找到&#xff0c;欢迎 star 支持&#xff01;前言本文是基于ViteAntDesignVue打造业务组件库[2] 专栏第 8 篇文章【函数库Rollup构建优化】&#xff0c;在上一篇文章的基础上&#xff0c;聊聊在使用 Rollup 构建函数库的过…

【从零开始制作 bt 下载器】一、了解 torrent 文件

【从零开始制作 bt 下载器】一、了解 torrent 文件写作背景了解 torrent 文件认识 bencodepython 解析 torrent 文件解密 torrent 文件结尾写作背景 最先开始是朋友向我诉说使用某雷下载结果显示因为版权无法下载&#xff0c;找其他的下载器有次数限制&#xff0c;于是来询问我…

Redis学习笔记(二)Redis基础(基于5.0.5版本)

一、Redis定位与特性 Redis是一个速度非常快的非关系数据库&#xff08;non-relational database&#xff09;&#xff0c;用 Key-Value 的形式来存储数据。数据主要存储在内存中&#xff0c;所以Redis的速度非常快&#xff0c;另外Redis也可以将内存中的数据持久化到硬盘上。…

[SSD综述 1.3] SSD及固态存储技术半个世纪发展史

在我们今天看来&#xff0c;SSD已不再是个新鲜事物。这多亏了存储行业的前辈们却摸爬滚打了将近半个世纪&#xff0c;才有了SSD的繁荣&#xff0c; 可惜很多前辈都没有机会看到。所有重大的技术革新都是这样&#xff0c;需要长期的技术积累&#xff0c;一代一代的工程师们默默的…

华为OD机试用Python实现 -【狼羊过河 or 羊、狼、农夫过河】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲狼羊过河 or 羊、狼、农夫过河题目描述输入描述输出描述说明示例一输入输出说明Python 代码实现代码实现思路华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址…

学到贫血之-贫血模型和充血模型

学习自&#xff1a;设计模式之美 1 基于贫血模型的传统开发模式 // ControllerVO(View Object) public class UserController {private UserService userService; //通过构造函数或者IOC框架注入public UserVo getUserById(Long userId) {UserBo userBo userService.getUser…

【华为OD机试模拟题】用 C++ 实现 - 相对开音节(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明相对开音节题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高…

【云原生】搭建k8s高可用集群—20230225

文章目录多master&#xff08;高可用&#xff09;介绍高可用集群使用技术介绍搭建高可用k8s集群步骤1. 准备环境-系统初始化2. 在所有master节点上部署keepalived3.1 安装相关包3.2 配置master节点3.3 部署haproxy错误解决3. 所有节点安装Docker/kubeadm/kubelet4. 部署Kuberne…

《痞子衡嵌入式半月刊》 第 72 期

痞子衡嵌入式半月刊&#xff1a; 第 72 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻&#xff0c;农历年分二十四节气&#xff0c;希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly)&#xff0c;欢迎提交 issue&#xff0c…

【华为OD机试模拟题】用 C++ 实现 - 求解连续数列+和最大子矩阵(2023.Q1 双倍快乐)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明求解连续数列题目输入输出描述示例一输入输出Code和最大子矩阵题目输入输出示例一输入输出说明