MySQL数据库(五)插入操作

MySQL数据库(五)插入操作前提要述:参考书籍《MySQL必知必会》 《MySQL必知必会》是先讲了查询,但是没有记录就无法查询,所以先将如何添加数据。 表已经知道怎么创建了,随便创两张。 5.1 插入数据 MySQL使用 IN

MySQL数据库(五)插入操作

前提要述:参考书籍《MySQL必知必会》

《MySQL必知必会》是先讲了查询,但是没有记录就无法查询,所以先将如何添加数据。

表已经知道怎么创建了,随便创两张。

5.1 插入数据

MySQL使用 INSERT来插入(或添加)行(记录)到数据库表中。插入可用以下几种方式使用:

  • 插入完整的行(记录);
  • 插入行的一部分;
  • 插入多行;
  • 插入某些查询结果。

5.2 插入完整的行(记录)

什么叫完整的行,即插入的有效数据都可以对应表中的每一列。

把数据插入表中,最简单的方法是使用基本的INSERT语法,需要指定表名和被插入到新行中的值,格式:

# 写法:
INSERT INTO <table_name> VALUES(value1,value2,...);
# 规范写法:
INSERT INTO <table_name>(field1, field2, ...) VALUES(value1,value2,...);

代码100分

解释:

  • 如果使用第一种写法,虽然很简单,但是并不安全,应该尽量避免使用。因为该语句高度依赖于表中列的次序,并且还依赖其次序容易获得的信息。即使可得到这种次序信息,也不能保证下次表结构变动后各个列保持完全相同的次序。所以在开发中如果这样写,那么就是把插入语句写死了。因为数据库表中的列的顺序有可能可能会改变,一旦改变,就会出现致命错误,比如:一个varchar类型的可能会被插入到char中,如果超长度可能会报错,而且varchar是大范围而char是小范围,可能会导致数据丢失;而如果一个浮点型的数据因为列顺序的改变插入到了一个整型的列中,这又不会报错,所以也很难找错。
  • 推荐使用规范写法,特别是在开发时编写sql语句。因为一旦指定列名,那么VALUES必须以其指定的次序匹配指定的列名,不一定按各个列出现在实际表中的次序。 所以即使表的结构改变,此INSERT语句仍然可以正确工作。
  • 第一种写法必须完整的给出表中的全部列的值,并且还得按照表中列的次序;而规范写法不用,因为会根据
    (field1, field2, …)来进行赋值,即使跟表中的列的次序不一样,或者一些列不想赋值。

例子:在学生表中插入数据

代码100分INSERT INTO student(stu_id, stu_name, stu_sex)  VALUES(1, '张三', '男');

注意:字符串或字符需要使用””(单引号)圈起来。

输出:如果成功的话

Query OK, 1 row affected (0.01 sec)

而如果在主键使用了自增长(AUTO_INCREMENT),那么则可以这样写

代码100分INSERT INTO student(stu_id, stu_name, stu_sex)  VALUES(null, '张三', '男');

或者,不写主键:

INSERT INTO student(stu_name, stu_sex)  VALUES('张三', '男');

也就是插入时,在主键的位置直接插入null或者不写默认就是赋给null,MySQL会因为AUTO_INCREMENT自己给它赋值。


  • 如果对表中不允许NULL值且没有默认值的列不给出值(插入时省略了),则MySQL将产生一条错误信息,并且相应的行插入不成功。
  • 规范写法哪些列可以省略不写:
    • 该列定义为允许NULL值(无值或空值);
    • 在表定义中给出默认值。也就表示如果在插入时不给出值,就会使用默认值;
    • 使用AUTO_INCREMENT的列。
  • INSERT操作可能很耗时(特别是有很多索引需要更新时),而且它可能降低等待处理的SELECT语句的性能。如果数据检索是最重要的,则可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级。
INSERT LOW_PRIORITY INTO
  • UPDATE操作和DELETE操作也适用。

5.3 插入多个行

INSERT可以插入一行到一个表中,也可以插入多行到一个表中,第一种方式就是写多条INSERT语句,还有一种方式就是在一条INSERT语句中插入多行。

语法:

INSERT INTO <table_name>(
    field1,
    field2,
    ...
    )
    VALUES(
        valueA1,
        valueA2,
        ...
        ),
        (
        valueB1,
        valueB2,
        ...
    );

此写法可以提供INSERT的性能,因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT快。

5.4 插入检索出的数据

INSERT语句可以利用一条SELECT语句查询的结果插入到表中。也就是所谓的INSERT SELECT,它是由一条INSERT语句和一条SELECT语句构成。

比如我需要把一张表的数据复制到另一张表,语法:

INSERT INTO <new_table_name>(field1, field2, ...) 
    SELECT field1, field2 FROM <old_table_name>;
# 或 也就是列名可以不同
INSERT INTO <new_table_name>(field1, field2, ...) 
    SELECT f1, f2 FROM <old_table_name>;

注意:如果新表不存在则报错。
解释:

  • 先使用SELECT语句从旧表中查询出数据,然后再使用INSERT语句把查询的结果插入到新表中。
  • SELECT列出的每一个列对应于

    后所跟的列表中的每一个列。
  • 如果 为空,即没有行可以插入也不会报错。
  • 如果能保证从旧表导入到新表(假设新表有数据)的主键值不会重复,那么插入时可以省略这主键,比如有AUTO_INCREMENT的主键就可以省略。
  • 在INSERT和SELECT语句中使用相同的列名,但是不一定要求列名匹配。实际上,MySQL甚至不关心SELECT返回的列名。它使用的是列的位置,因此SELECT中的第一列(不管列名)将用来填充表列中指定的第一个列,第二列将用来填充表列中指定的第二列等。
  • INSERT SELECT中SELECT语句可包含WHERE子句以过滤插入的数据。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10244.html

(0)
上一篇 2023-01-22
下一篇 2023-01-22

相关推荐

  • mysqldump参数详细说明

    mysqldump参数详细说明
    参数说明 –all-databases , -A 导出全部数据库。 mysqldump -uroot -p –all-databases –all-t…

    2023-04-07
    154
  • 《数据库系统概论》知识点梳理

    《数据库系统概论》知识点梳理第一章 绪论 1.1 数据库系统概述 1.1.1 数据库的4个基本概念 数据:描述事物的符号记录,数据的含义称为数据的语义,二者是不可分的。 数据库:数据库是长期存储在计算机内、有组织的、可共享的大量

    2023-05-24
    146
  • Python退出程序教程

    Python退出程序教程在编写Python程序时,退出程序是一项基本的任务。Python提供了多种方法来退出程序,包括使用异常、调用系统退出函数、使用sys模块等等。本篇文章将详细介绍Python通过不同方式退出程序的方法。

    2024-09-19
    16
  • Python应用之字符串替换功能

    Python应用之字符串替换功能在日常工作中,我们常常需要对文本进行一定的处理。经常会遇到需要用指定的字符串替换文本中的一些特定字符串的情况。比如,我们需要修改文章中某些单词或者短语的拼写错误,或者将一串字符转换为另一串字符。

    2023-12-19
    115
  • 故障分析 | MySQL 派生表优化

    故障分析 | MySQL 派生表优化作者:xuty 一、问题 SQL 原 SQL 如下: select name,count(name) from bm_id a left JOIN (select TaskName from up_…

    2023-02-02
    166
  • Python:一门优秀的编程语言

    Python:一门优秀的编程语言Python 是一门高级、解释型、强类型、动态类型的编程语言,由 Guido van Rossum 创造。Python 于 1991 年首次发布,是一门受到 ABC 语言启示而创建的语言。Python 最初设计用于编写自动化脚本(shell),后来逐渐发展成为通用编程语言,广泛应用于 Web 开发、数据分析、人工智能等领域。

    2024-07-18
    46
  • [20211213]提示precompute_subquery.txt「建议收藏」

    [20211213]提示precompute_subquery.txt「建议收藏」[20211213]提示precompute_subquery.txt–//学习了提示precompute_subquery,提示很明显就是先计算子查询的结果集,直接通过例子说明:1:环境:SCOT

    2023-05-01
    121
  • python缩写大全(python缩写词首字母)

    python缩写大全(python缩写词首字母)Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990

    2023-11-02
    135

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注