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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 『 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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
存储 SQL 监控
Visual Basic与数据库交互:实现数据访问和管理
【4月更文挑战第27天】本文探讨了使用Visual Basic进行数据库编程的基础,包括数据库基础、连接、数据访问技术如ADO.NET,数据绑定,事务处理,存储过程与视图。还强调了性能优化、安全性、测试与调试,以及持续维护的重要性。通过掌握这些概念和技巧,开发者能构建高效、可靠的数据驱动应用。
|
5天前
|
SQL 关系型数据库 MySQL
Spring_jdbc数据连接池(mysql实现增、删、改、查)
Spring_jdbc数据连接池(mysql实现增、删、改、查)
13 0
|
3天前
|
关系型数据库 MySQL 数据挖掘
【MySQL】多表连接查询
【MySQL】多表连接查询
|
6天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
7天前
|
存储 数据可视化 关系型数据库
MySQL字段的时间类型该如何选择?千万数据下性能提升10%~30%🚀
本文探讨MySQL中时间类型的选择,阐述datetime、timestamp、整形时间戳等类型特点以及它们在千万级数据量下的查询性能
MySQL字段的时间类型该如何选择?千万数据下性能提升10%~30%🚀
|
11天前
|
SQL 关系型数据库 MySQL
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
19 2
|
12天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
21 1
|
13天前
|
关系型数据库 MySQL Shell
MySQL 查询
MySQL 查询
|
13天前
|
SQL 关系型数据库 MySQL
关系型数据库插入数据的语句
使用SQL的`INSERT INTO`语句向关系型数据库的`students`表插入数据。例如,插入一个`id`为1,`name`为'张三',`age`为20的记录:`INSERT INTO students (id, name, age) VALUES (1, '张三', 20)。如果`id`自增,则可简化为`INSERT INTO students (name, age) VALUES ('张三', 20)`。
21 2
|
13天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
9 2