【MySQL入门指南】4种插入数据的方法

news/2024/11/30 9:46:54/

文章目录

  • MySQL的增删查改① - 增
    • 1.发生冲突则失败
      • 1.1 基本语法
      • 1.2 单行数据+全列插入
      • 1.3 多行数据 + 指定列插入
    • 2.发生冲突则更新
      • 2.1 基本语法
      • 2.2 插入否则更新
    • 3.发生冲突则替换
      • 3.1 基本语法
      • 3.2插入否则替换
    • 4.插入查询结果

MySQL的增删查改① - 增

-- 创建一张学生表
CREATE TABLE students (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,sn INT NOT NULL UNIQUE COMMENT '学号',name VARCHAR(20) NOT NULL,qq VARCHAR(20)
);

增加记录的实验都将在students表上进行,students表的结构如上图所示。

1.发生冲突则失败

1.1 基本语法

🎯[语法]:

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

📝[说明]:

  • []中的内容是可以省略的,如下:

    insert students values (0, 10000, '唐三藏', NULL);  
    
  • 在插入数据的时候,values中的值是与column前后一一对应的。如果column省略,则表示全列插入——给所有列依次插入

    image-20230502143041498

  • insert语句一次可以插入多条记录,记录间用逗号隔开

    INSERT INTO students (id, sn, name) VALUES(102, 20001, '曹孟德'),(103, 20002, '孙仲谋');
    
  • 当主键或者唯一键的唯一性发生冲突时(即插入重复的记录时),插入操作失败

下面为大家一些具体的使用案例:

1.2 单行数据+全列插入

mysql> insert into students values(1, 10000, '唐三藏', '123456');
Query OK, 1 row affected (0.01 sec)mysql> insert into students values(2, 10001, '孙悟空', '1234567');
Query OK, 1 row affected (0.00 sec)mysql> select * from students;
+----+-------+-----------+---------+
| id | sn    | name      | qq      |
+----+-------+-----------+---------+
|  1 | 10000 | 唐三藏    | 123456  |
|  2 | 10001 | 孙悟空    | 1234567 |
+----+-------+-----------+---------+
2 rows in set (0.00 sec)

1.3 多行数据 + 指定列插入

mysql> insert into students(sn, name) values(10002, '曹孟德'),(10003, '孙仲谋');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from students;
+----+-------+-----------+---------+
| id | sn    | name      | qq      |
+----+-------+-----------+---------+
|  1 | 10000 | 唐三藏    | 123456  |
|  2 | 10001 | 孙悟空    | 1234567 |
|  3 | 10002 | 曹孟德    | NULL    |
|  4 | 10003 | 孙仲谋    | NULL    |
+----+-------+-----------+---------+
4 rows in set (0.00 sec)

📌[注意]:

  • insert语句可以一次插入多条记录,各条记录间用逗号分隔。
  • 更加推荐使用指定列插入,这样就算表的结构改变了(比如增加了一个邮箱字段),我们的sql语句也不会受影响

2.发生冲突则更新

2.1 基本语法

🎯[语法]:

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

📝[说明]:

  • 由于 主键 或者 唯一键 对应的值已经存在而导致插入失败,可以选择性的进行同步更新操作,即对指定列的值进行修改

2.2 插入否则更新

mysql> select * from students;
+----+-------+-----------+---------+
| id | sn    | name      | qq      |
+----+-------+-----------+---------+
|  1 | 10000 | 唐三藏    | 123456  |
|  2 | 10001 | 孙悟空    | 1234567 |
|  3 | 10002 | 曹孟德    | NULL    |
|  4 | 10003 | 孙仲谋    | NULL    |
+----+-------+-----------+---------+
4 rows in set (0.00 sec)-- 主键发生冲突,进行更新操作mysql> insert into students(id, sn, name) values(1, 10000, '唐僧')-> on duplicate key update sn=9999, name='唐僧';
Query OK, 2 rows affected (0.00 sec)mysql> select * from students;
+----+-------+-----------+---------+
| id | sn    | name      | qq      |
+----+-------+-----------+---------+
|  1 |  9999 | 唐僧      | 123456  |
|  2 | 10001 | 孙悟空    | 1234567 |
|  3 | 10002 | 曹孟德    | NULL    |
|  4 | 10003 | 孙仲谋    | NULL    |
+----+-------+-----------+---------+
4 rows in set (0.00 sec)-- 没有发生冲突,正常插入mysql> insert into students(id, sn, name) values(5, 10000, '唐僧') -> on duplicate key update id = 6, sn=9999, name='唐长老';
Query OK, 1 row affected (0.01 sec)mysql> select * from students;
+----+-------+-----------+---------+
| id | sn    | name      | qq      |
+----+-------+-----------+---------+
|  1 |  9999 | 唐僧      | 123456  |
|  2 | 10001 | 孙悟空    | 1234567 |
|  3 | 10002 | 曹孟德    | NULL    |
|  4 | 10003 | 孙仲谋    | NULL    |
|  5 | 10000 | 唐僧      | NULL    |
+----+-------+-----------+---------+
5 rows in set (0.00 sec)

📌[注意]:

  • 当插入数据(1, 10000, '唐僧')时,主键id发生冲突,因此对原记录进行选择性修改
  • 当插入数据(5, 10000, '唐僧')时,没有发生冲突,则正常插入

3.发生冲突则替换

3.1 基本语法

🎯[语法]:

REPLACE INTO students [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...

📝[说明]:

  • 主键、唯一键没有发生冲突,则直接插入数据

  • 发生冲突,则删除原始数据后再插入(即替换的效果)

3.2插入否则替换

mysql> select * from students;
+----+-------+-----------+---------+
| id | sn    | name      | qq      |
+----+-------+-----------+---------+
|  1 |  9999 | 唐僧      | 123456  |
|  2 | 10001 | 孙悟空    | 1234567 |
|  3 | 10002 | 曹孟德    | NULL    |
|  4 | 10003 | 孙仲谋    | NULL    |
|  5 | 10000 | 唐僧      | NULL    |
+----+-------+-----------+---------+
5 rows in set (0.00 sec)-- 主键发生冲突则进行替换mysql> replace into students(id, sn, name, qq) values(5, 10004, '刘玄德', '666666');
Query OK, 2 rows affected (0.01 sec)-- 没有发生主键冲突则直接插入mysql> replace into students(id, sn, name, qq) values(6, 10005, '关云长', '888888');
Query OK, 1 row affected (0.00 sec)mysql> select * from students;
+----+-------+-----------+---------+
| id | sn    | name      | qq      |
+----+-------+-----------+---------+
|  1 |  9999 | 唐僧      | 123456  |
|  2 | 10001 | 孙悟空    | 1234567 |
|  3 | 10002 | 曹孟德    | NULL    |
|  4 | 10003 | 孙仲谋    | NULL    |
|  5 | 10004 | 刘玄德    | 666666  |
|  6 | 10005 | 关云长    | 888888  |
+----+-------+-----------+---------+
6 rows in set (0.00 sec)

📌[注意]:

  • 插入数据 5, 10004, '刘玄德', '666666' 时,主键发生冲突,因此先删除表中原先冲突的数据,再将数据插入。所以我们会看到 “2 rows affected”
  • 插入数据 6, 10005, '关云长', '888888' 时没有发生冲突,则直接插入。我们也不难理解为什么是“1 row affected”
  • 如果插入的数据与多行数据都有冲突,那么所有冲突的记录都会被删除

4.插入查询结果

INSERT 还支持将查询结果插入到一张表中:

  • 快速创建一张和现有表结构相同的表

    create table t1 like t2  -- 只会靠别表结构,不会拷贝数据
    
  • 将一张表中的搜索结果插入到另一张表中

    -- 将表for_duplicate去重后的数据插入到 duplicate 中
    mysql> insert into for_duplicate values(1, 'aa'), (1, 'aa'), (2, 'bb'), (2, 'bb');
    Query OK, 4 rows affected (0.00 sec)
    Records: 4  Duplicates: 0  Warnings: 0mysql> insert into duplicate select distinct * from for_duplicate;
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0mysql> select * from duplicate;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | aa   |
    |    2 | bb   |
    +------+------+
    2 rows in set (0.00 sec)
    

http://www.ppmy.cn/news/59010.html

相关文章

十几个免费好用的抓包工具

1. Hping Hping是最受欢迎和免费的抓包工具之一。它允许你修改和发送自定义的ICMP,UDP,TCP和原始IP数据包。此工具由网络管理员用于防火墙和网络的安全审计和测试。 HPing可用于各种平台,包括Windows,MacOs X,Linux&…

08 Kubernetes应用配置管理

课件 在 Kubernetes 中,secret 是一种用于存储敏感信息的对象。Kubernetes 支持以下三种类型的 secret: Opaque:这是默认的 secret 类型,可以用于存储任何类型的数据,包括字符串、二进制数据等。 Service Account&…

sqlserver object_id()函数学习

在SQLServer数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id(name,type)方法, 语法:object_id(objectname)或object(objectname,type) 作用:该函数会返回指定对象的ID值&#xf…

100种思维模型之蝴蝶效应思维模型-56

“蝴蝶效应 ”说的是:一只南美洲亚马孙河边热带雨林中的蝴蝶,偶尔扇几下翅膀,就有可能在两周后引起美国得克萨斯的一场龙卷风。 原因在于: 蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的…

idea好用插件分享——Bito-ChatGPT

文章目录 安装步骤:第一步:打开Setting第二步:选择Plugins,输入Bito,就可以搜索出来了,再点击安装第三步:安装完成回到IDEA主界面,右边区域可以看到Bito图标,点击展开&am…

MySQL数据库——MySQL TRUNCATE:清空表记录

MySQL 提供了 DELETE 和 TRUNCATE 关键字来删除表中的数据。下面主要讲解一下 TRUNCATE 关键字的使用。 TRUNCATE 关键字用于完全清空一个表。其语法格式如下: TRUNCATE [TABLE] 表名 其中,TABLE 关键字可省略。 例 1 新建表 tb_student_course&…

Spring 5 笔记 - 入门与IOC

1. Spring 入门简介 Spring:轻量级、开源的JavaEE框架, 解决企业应用的复杂性。包括IOC和AOP两个核心部分。 IOC: 控制反转,把创建对象和对象之间的调用的过程都交给Spring 进行管理,使耦合度降低。 AOP&#xff1a…

PHP+vue大学生心理健康评价和分析系统8w3ff

本整个大学生心理健康管理系统是按照整体需求来实现各个功能的,它可以通过心理健康测评来检测大学生的心理健康,并且给予预警,还可以预约医生来解决问题。并且,管理员可以查看用户信息,发布一些关于心理健康的文章。该…