avatar

一条在知识海洋的咸鱼

这个家伙很懒,啥也没有留下😋

  • 首页
  • Linux
  • OCJP
  • Java核心技术卷
  • J2EE相关标准
  • 深入理解Java虚拟机
  • NIO与SOcket编程技术指南
  • Java多线程编程核心技术
  • Redis开发与运维
  • Spring Cloud Alibaba 微服务原理与实践
  • DevOps
  • Docker
  • MySQL必知必会
  • AI自学路线
  • Spring Boot 编程思想(核心篇)
主页 第十九章 插入数据
文章

第十九章 插入数据

发表于 2021-07-4 更新于 2026-06- 10
作者 Administrator
10~14 分钟 阅读

INSERT语句

  • 插入数据
    • 插入及系统安全
  • 插入完整的行
    • 注意
  • 插入多个行
  • 插入检索出的数据
    • INSERT SELECT中的列名

插入数据

INSERT使用来插入(或添加)行到数据库表的,可以用集中方式使用:

  • 插入完整的行
  • 插入行的一部分
  • 插入多行
  • 插入某些查询的结果

插入及系统安全

MySQL的安全机制可针对每个表或每个用户,禁止使用INSERT语句

插入完整的行

INSERT语法要求指定表名和被插入到新行中的值

  • 例1
INSERT INTO customers
VALUES
	( NULL,"Pep E. LaPew", "100 Main Street", "Los Angeles", "CA", "90046", "USA", NULL, NULL );

此例子插入一个新客户到customers表
虽然这种语法很简单,但并不安全,应该尽量避免使用。其高度依赖于表中列的定义次数,并且还依赖于其次序容易获得的信息。
image.png

  • 例2
INSERT INTO customers ( cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email )
VALUES
	( "Pep E. LaPew", "100 Main Street", "Los Angeles", "CA", "90046", "USA", NULL, NULL );

因为提供了列名字,VALUES只需要一起指定的次序匹配指定的列名,不需要按照各个列出现在实际表中的次序,即使表的结构改变,此INSERT语句仍然能够正确工作
image.png

注意

  • 总是使用列的列表
    应该总是使用列的列表,使用列的列表能使SQL代码继续发挥作用(即使表结构发生了变化)
  • 仔细地给出值
    不管使用哪种INSERT语法,都必须给出VALUES的正确数目
  • 省略列
    如果表的定义允许,可以在INSERT操作中省略某些列,列需满足:
    1.允许为NULL值
    2.给出默认值,如果不给出值,将使用默认值
  • 提高整体性能
    INSERT操作可能很耗时,特别是有很多索引需要更新时,其可能降低等待处理的SELECT语句的性能
    可以通过在INSERT和INTO之间添加 关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级。INSERT LOW_PRIORITY INTO

插入多个行

插入多个行可以使用多条INSERT语句或只使用一次,每条语句用一个分号结束。
1.使用多条INSERT语句

INSERT INTO customers ( cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country )
VALUES
	( "Pep E. LaPew", "100 Main Street", "Los Angeles", "CA", "90046", "USA" );
INSERT INTO customers ( cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country )
VALUES
	( "M. Martian", "42 Galaxy Way", "New York", "NY", "11213", "USA" );

image.png
2.使用一条INSERT语句

INSERT INTO customers ( cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country )
VALUES
	( "Pep E. LaPew", "100 Main Street", "Los Angeles", "CA", "90046", "USA" ),
	( "M. Martian", "42 Galaxy Way", "New York", "NY", "11213", "USA" );

单条INSERT语句有多组只,每组值用一堆圆括号扩起来,用逗号分隔
image.png

  • 提高MySQL的性能
    MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句更快

插入检索出的数据

还可以用INSERT将一条SELECT语句的结果插入表中,即INSERT SELECT,其由一条INSERT语句和一条SELECT语句组成

INSERT INTO customers 
( cust_id, cust_contact, cust_email, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country ) 
SELECT
cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country 
FROM
	custnew;

其使用INSERT SELECT从custnew中将所有数据导入customers表中。
这个丽日导入了cust_id(如果能确保cust_id不重复),也可以省略这行,这样MySQL就会生成新值。

  • INSERT SELECT中SELECT语句可包含WHERE子句以过滤插入的数据

INSERT SELECT中的列名

在INSERT和SELECT语句中使用了相同的列名。但是不一定要求列名匹配。MySQL甚至不关心SELECT返回的列名。

MySQL必知必会
SQL
许可协议: 
分享

相关文章

7月 6, 2021

第二十九章 数据库维护

7月 6, 2021

第二十八章 安全管理

确保数据的安全和完整需要利用访问控制访问控制root账户不要使用root管理用户创建用户账号简单创建一个新用户账号使用GRANT或INSERT创建重命名用户账号删除用户账号设置访问权限访问控制用户需要对其数据具有适当的访问权,既不能过多,也不能过少,例如多数用户需要对表进行读写,少数用户需要创建和删

7月 6, 2021

第二十七章 全球化和本地化

MySQL处理不同字符集和语言的基础知识字符集和校对顺序校对的重要性使用字符集和校对顺序字符集和校对顺序数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索MySQL需要适应不同的字符集(字母和字符),应应不同的排序和检索数据的方法字符集:字母和符号的集合编码:某个字符集成员的

下一篇

第二十章 更新和删除数据

上一篇

第十八章 全文本检索

最近更新

  • 55 异常兜底:工具失败、非法输出、空检索与超时
  • 54 Agent Memory:短期记忆、用户上下文与摘要
  • 53 Human-in-the-loop:让关键动作暂停、确认与恢复
  • 52 工单 Tool:字段校验、创建结果与失败补偿
  • 51 订单 Tool:Mock、鉴权、状态解析与脱敏

热门标签

java基础 微服务 maven Spring Tomcat DDD Linux Linux基础 SQL基础 数据结构算法

目录

©2026 一条在知识海洋的咸鱼. 保留部分权利。

使用 Halo 主题 Chirpy