SQL第15课——插入数据

介绍利用SQL的insert语句将数据插入表中。

15.1 数据插入

select是最常用的语句,但是还有3个常用的SQL语句,第一个就是insert,

insert:用来将行插入(或添加)到数据库表。插入的3中方式:

  1. 插入完整的行;

  2. 插入行的一部分;

  3. 插入某些查询的结果。

15.1.1 插入完整的行

insert语法,要求制定表名和插入到新行中的值。

将一个新的顾客插入到customers表中,必须给每一列提供一个值。如果某列没有值,应该使用null值(假定表允许对该列指定空值)。出现的次序填充

弊端:

不安全,高度依赖于表中列的定义次序,还依赖于其容易获得的次序信息。

更安全的方法:

values中的第一个值对应第一个指定列名,如此等等。

优点:即使表的结构改变,这条insert语句仍然能正确工作。

**这个结果:**显示id为1000000006的顾客已经存在。主键的值必须有唯一性,而cust_id为主键,DBMS不允许插入相同cust_id值的新行。

15.1.2 插入部分行

使用insert的推荐方法是明确给出表的列名,这种表示可以只给某些列提供值,给其他列不提供值。如下,不提供cust_contact, cust_email列名,也不提供这两列的提供值。

省略的列必须满足以下某个条件:

  1. 该列定义为允许null值(无值或空值)'

  2. 在表定义中给出默认值。这表示如果不给出值,将使用默认值。

15.1.3 插入检索出的数据

insert还存在另一种形式,利用它将select语句的结果插入表中,这就是insert select。是由一条insert语句和一条select语句组成的。

假如想把另一表中顾客列合并到customers表中,不需要每次读取一行再将它用insert插入:

**说明:**从一个名为custnew的表中读出数据并插入到customers表。

应该首次按创建和填充custnew表,custnew表的结构与customers表相同。

在填充custnew时,不应该使用已经在customers中用过的cust_id值。

从custnew中将所有数据导入customers。select语句从custnew检索出要插入的值,而不是列出它们。select中列出的每一列对应于customers表名后所跟的每一列。插入的多少行,依赖于custnew表有多少行。

select中的第一列(不管其列名)将用来填充表列中指定的第一列。

**!!!**insert select中select语句可以包含where子句,以过滤插入的数据。

insert通常只插入一行。要插入多行,必须执行多个insert语句;

insert select是个例外,可以用一条insert插入多行,不管select语句返回多少行,都将被insert插入。

15.2 从一个表复制到另一个表

将一个表的内容复制到一个全新的表(运行中创建的表),使用create select语句。

将数据复制到一个新表(有的DBMS可以覆盖已经存在的表,这依赖于所使用的具体DBMS)

相关推荐
黄俊懿10 分钟前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——开启全局事务
java·数据库·spring·spring cloud·微服务·架构·架构师
我命由我1234532 分钟前
python-dotenv - python-dotenv 快速上手
服务器·开发语言·数据库·后端·python·学习·学习方法
繁星蓝雨1 小时前
Qt优雅的组织项目结构三(使用CMakeLists进行模块化配置)——————附带详细示例代码
开发语言·数据库·qt
Jerry.张蒙2 小时前
SAP业财一体化实现的“隐形桥梁”-价值串
大数据·数据库·人工智能·学习·区块链·aigc·运维开发
无名修道院2 小时前
DVWA 靶场搭建:Windows11(phpstudy 搭建)(步骤 + 截图 + 常见问题)
数据库·网络安全·渗透测试·靶场·php·dvwa·phpstudy
CodeAmaz3 小时前
MySQL 事务隔离级别详解
数据库·mysql·事务隔离级别
千寻技术帮4 小时前
10398_基于SSM的教学评价管理系统
数据库·mysql·毕业设计·ssm·教学评价
晨星3344 小时前
使用 IntelliJ IDEA 轻松连接 Java 与 MySQL 8 数据库
java·开发语言·数据库
PWRJOY4 小时前
【MySQL】使用mycli查看数据库的基本操作
数据库·mysql
SadSunset5 小时前
(16)Bean的实例化
java·数据库·笔记·spring