『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(上)



📂 Create(创建/新增)

对于表内数据的创建无非就是对数据的插入;

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

存在一张表为:

mysql> create table if not exists stu(
    -> id int(2) unsigned zerofill primary key comment'id并设置主键约束',
    -> sn int(5) unsigned zerofill not null unique comment'学号',
    -> name varchar(20) not null comment'姓名',
    -> email varchar(32) null comment'邮箱'
    -> );
Query OK, 0 rows affected (0.00 sec)
mysql> desc stu;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type                     | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| id    | int(2) unsigned zerofill | NO   | PRI | NULL    |       |
| sn    | int(5) unsigned zerofill | NO   | UNI | NULL    |       |
| name  | varchar(20)              | NO   |     | NULL    |       |
| email | varchar(32)              | YES  |     | NULL    |       |
+-------+--------------------------+------+-----+---------+-------+

📌全列插入与指定列插入📌

以该表为例,若是需要为该表插入数据,插入数据的方式分为全列插入指定列插入;

  • 全列插入
    全列插入指的是在插入数据时需要插入表中所有的字段;
    即表中有几个字段就需要根据字段个数与字段要求插入对应的数据;
mysql> insert into stu values(1,1,'Lihua','123456@xx.com'); #全列插入
Query OK, 1 row affected (0.00 sec)
mysql> select * from stu;
+----+-------+-------+---------------+
| id | sn    | name  | email         |
+----+-------+-------+---------------+
| 01 | 00001 | Lihua | 123456@xx.com |
+----+-------+-------+---------------+
1 row in set (0.00 sec)
  • 在默认的插入中使用的即为全列插入,在全列插入时values前不需要使用()来指明需要插入 的字段,只需要在values后使用()按照字段顺序插入对应数据即可;
    语法:
insert [into] table_name values (value_list) [, (value_list)] ...
  • 其中带[]的为可省略;
  • 指定列插入
    指定列插入,顾名思义是需要指定所插入的字段进行插入;
mysql> insert into stu (id,name,sn)value(2,'Zhangqian',2);#指定列插入
Query OK, 1 row affected (0.00 sec)
mysql> select * from stu;
+----+-------+-----------+---------------+
| id | sn    | name      | email         |
+----+-------+-----------+---------------+
| 01 | 00001 | Lihua     | 123456@xx.com |
| 02 | 00002 | Zhangqian | NULL          |
+----+-------+-----------+---------------+
2 rows in set (0.00 sec)
  • 如该段代码所示,这段代码演示了如何使用指定列插入,插入数据时在values前使用()指定了需要插入数据的字段,在插入数据时根据所指定字段的顺序以及对应的要求对表进行数据的插入;
    语法:
insert [into] table_name [(column [, column] ...)/*指定列*/]values (value_list) [, (value_list)] ...

📌单行数据插入与多行数据插入📌

无论是全列插入还是指定列插入都能进行对应的单行数据与多行数据插入;

这表示在MySQL中对于各种条件的混用是十分灵活的;

  • 单行数据插入
    单行数据插入即在解释全列插入与指定列插入所使用的数据插入;
    mysql> insert into stu values(1,1,'Lihua','123456@xx.com'); #单行数据插入
    这个代码中为什么叫做单行数据插入?
    在MySQL中我们将字段称之为列,对应的行即为对应的一组数据;
    这里的values(1,1,'Lihua','123456@xx.com')即为插入一行数据,该行数据根据对应的字段如上;
  • 多行数据插入
    而要进行多行数据插入则可以直接使用,(value_list)来对数据进行追加;
    示例:(这里以全列插入为例,指定列插入不再作示范)
mysql> insert into stu values(3,3,'Liqiang','112233'),(4,4,'Zhangwu','223344'),(5,5,'Liuba','445566');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> select * from stu;
+----+-------+-----------+---------------+
| id | sn    | name      | email         |
+----+-------+-----------+---------------+
| 01 | 00001 | Lihua     | 123456@xx.com |
| 02 | 00002 | Zhangqian | NULL          |
| 03 | 00003 | Liqiang   | 112233        |
| 04 | 00004 | Zhangwu   | 223344        |
| 05 | 00005 | Liuba     | 445566        |
+----+-------+-----------+---------------+
5 rows in set (0.00 sec)

📌插入数据否则更新📌

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

插入数据否则更新这个是为了应对当在插入数据时发生的主键冲突或者唯一键冲突

当插入数据时发生主键冲突或者唯一键冲突时使用这个语法时将会将原本的数据删除并以新的数据进行插入并替换该数据;

以该表为例:

+----+-------+-----------+---------------+
| id | sn    | name      | email         |
+----+-------+-----------+---------------+
| 01 | 00001 | Lihua     | 123456@xx.com | 
| 02 | 00002 | Zhangqian | NULL          |
| 03 | 00003 | Liqiang   | 112233        |
| 04 | 00004 | Zhangwu   | 223344        |
| 05 | 00005 | Liuba     | 445566        |
+----+-------+-----------+---------------+
mysql> show create table stu\G
*************************** 1. row ***************************
       Table: stu
Create Table: CREATE TABLE `stu` (
  `id` int(2) unsigned zerofill NOT NULL COMMENT 'id并设置主键约束',
  `sn` int(5) unsigned zerofill NOT NULL COMMENT '学号',
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `email` varchar(32) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`),
  UNIQUE KEY `sn` (`sn`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

从上面的代码可以看出其中id字段设有主键约束,sn字段设有唯一键约束;

在不使用替换的语法前对其进行插入数据,且人为的触发其中一个约束冲突;

#主键冲突
mysql> insert into stu values(5,6,'Lianhua','22222');
ERROR 1062 (23000): Duplicate entry '05' for key 'PRIMARY'
#唯一键冲突
mysql> insert into stu values(6,5,'Lianhua','22222');
ERROR 1062 (23000): Duplicate entry '00005' for key 'sn'

当发生冲突时使用语法使其完成当发生键值冲突进行替换;

mysql> insert into stu values(5,6,'Lianhua','22222') 
    -> on duplicate key update id = 6,sn = 6,name ='LIANHUA',email='22222';
Query OK, 2 rows affected (0.00 sec)
mysql> select * from stu;
+----+-------+-----------+---------------+
| id | sn    | name      | email         |
+----+-------+-----------+---------------+
| 01 | 00001 | Lihua     | 123456@xx.com |
| 02 | 00002 | Zhangqian | NULL          |
| 03 | 00003 | Liqiang   | 112233        |
| 04 | 00004 | Zhangwu   | 223344        |
| 06 | 00006 | LIANHUA   | 22222         | #->已经发生了替换
+----+-------+-----------+---------------+

从上面的操作可以看出原来的其中一个字段为:

| 05 | 00005 | Liuba | 445566 |

在这次插入失败后进行了替换,替换为了:

| 06 | 00006 | LIANHUA | 22222 |

不仅如此,在替换成功时也有对应的提示:

Query OK, 2 rows affected (0.00 sec)

在MySQL中以该方式进行数据插入时,会有对应提示:

-- 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,并且数据已经被更新

📌数据的替换📌

数据的替换类比于上一个插入数据否则更新;

数据的替换真正的意义上是:

  • 若是发生主键冲突或者唯一键冲突,则删除原数据再进行插入;
  • 若是未发生主键冲突也未发生唯一键冲突,则直接插入数据;
    对应的语法即为INSERT INTO变为REPLACE INTO;
mysql> replace into stu values(5,6,'Lianhua','22222');
Query OK, 2 rows affected (0.00 sec)



『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(下)https://developer.aliyun.com/article/1424460

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
201 66
|
2月前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
194 61
|
12天前
|
SQL 存储 关系型数据库
MySQL/SqlServer跨服务器增删改查(CRUD)的一种方法
通过上述方法,MySQL和SQL Server均能够实现跨服务器的增删改查操作。MySQL通过联邦存储引擎提供了直接的跨服务器表访问,而SQL Server通过链接服务器和分布式查询实现了灵活的跨服务器数据操作。这些技术为分布式数据库管理提供了强大的支持,能够满足复杂的数据操作需求。
55 12
|
5天前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
17 1
|
10天前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
13天前
|
前端开发 JavaScript 数据库
获取数据库中字段的数据作为下拉框选项
获取数据库中字段的数据作为下拉框选项
42 5
|
11天前
|
SQL 存储 关系型数据库
数据库的创建和增删查改使用操作(超详细)
本文主要带新手小白理解上手mysql的增删查改等操作
|
16天前
|
存储 Oracle 关系型数据库
索引在手,查询无忧:MySQL索引简介
MySQL 是一款广泛使用的关系型数据库管理系统,在2024年5月的DB-Engines排名中得分1084,仅次于Oracle。本文介绍MySQL索引的工作原理和类型,包括B+Tree、Hash、Full-text索引,以及主键、唯一、普通索引等,帮助开发者优化查询性能。索引类似于图书馆的分类系统,能快速定位数据行,极大提高检索效率。
48 8
|
19天前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
60 11
|
23天前
|
存储 关系型数据库 MySQL
mysql怎么查询longblob类型数据的大小
通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
88 6