SQL学习十二、插入数据

这篇具有很好参考价值的文章主要介绍了SQL学习十二、插入数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面学习记录的都是查询数据,那些也是SQL中最常用的语句,这篇我们来学习和积累一下相数据库中插入数据的SQL。

另外,需要注意的是,很多数据库对查询操作要求的权限可能低一些,但是对于插入、修改、删除等操作都需要较高的权限。

INSERT INTO 语句

1、插入完整的行

例如我们需要插入一条新的订单记录可以这样写:

  • 写法 一 :
    无需指定要插入数据的列名,只需提供被插入的值即可。
    SQL格式 INSERT INTO table_name VALUES (value1,value2,value3,...)
insert into oderlist_new
VALUES (19,'圣女果',10,10.0,'20181021001',32,'吴语','2018-10-21 2:25:55',3)

SQL学习十二、插入数据

SQL说明:
上面的 SQL语句高度依赖于表中列的定义次序,如果表结构发生改变时这样写是不安全的,所以虽然这种语法很简单,但应该尽量避免使用。那么我们该怎么写呢?来看第二种写法

  • 写法 二:
    需要指定列名及被插入的值
    SQL格式INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...)
insert into oderlist_new (id,goodsName,quantity,item_price,orderNo,userId,userName,orderTime,supplierId)
VALUES (20,'圣女果',10,10.0,'20181021002',32,'吴语','2018-10-21 22:28:55',3)

SQL学习十二、插入数据

SQL说明:
上面的SQL语句,在表名后的括号里 明确给出了列名,在插入的时候,DBMS 会将 VALUES 列表中的相应值填 入列表中的对应项。
因为提供了列名,VALUES 必须以其指定的次序匹配指定的列名,所以即使表的结构改变,这条 INSERT 语句仍然能正确工作。


2、插入部分行

使用上面的第二种写法,我们也可以进行部分数据的插入,比如,我们只需要插入订单表中的部分数据(商品名、数量、单价),我们可以这样写

insert into oderlist_new (goodsName,quantity,item_price)
VALUES ('圣女果',10,10.0)

SQL学习十二、插入数据

SQL学习十二、插入数据

SQL说明:
可以看到,我们这里省略其他字段的插入值,在数据表中都用NULL进行了填充。

省略的列 必须满足以下某个条件。
1、该列定义为允许 NULL 值(无值或空值)。
2、在表定义中给出默认值也可以。这表示如果不给出值,将使用默认值。

如果某些列以上两个条件都不满足,那我们将其省略的时候,插入就会报错,比如我们将订单号orderNo设定为非空且无默认值的列,再执行上述插入语句
SQL学习十二、插入数据

SQL学习十二、插入数据

我们看到插入失败了!


INSERT INTO SELECT 语句

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。SQL格式

INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

3、插入检索出的数据

有时候我们需要将某个 SELECT 语句查询出来的结果插入表中,这就是所谓的 INSERT SELECT,它是由一条 INSERT 语句和一条 SELECT 语句组成的。

例如,我们进行了数据库升级需要将老的订单表中的数据(包含订单信息和供应商信息)插入到新的订单表和供应商表中,我们可以这样写
SQL学习十二、插入数据

SQL学习十二、插入数据

SQL学习十二、插入数据

  • 将老订单表中的供应商信息分离出来并插入到供应商表中,同一供应商存储一条记录
    我们直接这样执行的话,会有重复的供应商信息存储到供应商表中
INSERT INTO supplier_new
(supplier,supplierAddress,supplierTel,supplierEmail,supplierContact)
SELECT supplier,supplierAddress,supplierTel,supplierEmail,supplierContact
FROM oderlist;

SQL学习十二、插入数据

我们插入了18条相同的供应商信息到供应商表格中
SQL学习十二、插入数据

像这种没有唯一标识情况,我们怎么对其进行分组,并防止重复插入呢?
既然不能根据单一字段值进行唯一性判断,我们就取多个字段进行分组判断(这里,我取了供应商的所有相关字段进行唯一性判断,当然实际使用中可以更具实际情况来,比如有的数据中可能只需要更具供应商的名称就可以进行唯一性判断),我们调整一下SQL的写法:

INSERT INTO supplier_new
(supplier,supplierAddress,supplierTel,supplierEmail,supplierContact)
SELECT supplier,supplierAddress,supplierTel,supplierEmail,supplierContact
FROM oderlist
group by supplier,supplierAddress,supplierTel,supplierEmail,supplierContact;

SQL学习十二、插入数据

我们将订单表中相同的供应商进行了分组,并且相同的供应商只插入了1条数据到供应商表格中
SQL学习十二、插入数据

  • 将老订单表中的订单信息分离出来并插入到新的订单表中,同时关联上供应商信息
INSERT INTO oderlist_new
(goodsName,quantity,item_price,orderNo,userId,userName,orderTime,supplierId)
SELECT goodsName,quantity,item_price,orderNo,userId,userName,orderTime,4
FROM oderlist;

SQL学习十二、插入数据

我们将老订单表中的订单信息全部插入到了新的订单表中
SQL学习十二、插入数据

这样,我们就将老的订单表中的供应商信息进行了分离,完成数据库的升级。

补充

再代码中实际使用的时候,我们可以使用这样的SQL来获取我们插入到供应商表中的供应商id,并作为老订单表中数据插入到新订单表中时的supplierId,而不是我上面写死的4,SQL如下:

INSERT INTO oderlist_new
(goodsName,quantity,item_price,orderNo,userId,userName,orderTime,supplierId)
select
	o.`goodsName`	,
	o.`quantity`	,
	o.`item_price`	,
	o.`orderNo`	  ,
	o.`userId`	,
	o.`userName`	,
	o.`orderTime`	,
	(select id from supplier_new where `supplier` = o.supplier and
	`supplierAddress`	= o.supplierAddress and
	`supplierTel`	= o.supplierTel and
	`supplierEmail`	= o.supplierEmail and
	`supplierContact`= o.supplierContact ) as `supplierId`
from oderlist o

SQL学习十二、插入数据

SQL学习十二、插入数据


将一个表中的数据复制到另一个表

比如我们修改了表的结构(比如指定了外键),现在需要把老表( oderlist_new2 )中的数据全部复制到新表( oderlist_new )中,我们可以这样写

使用SELECT INTO语句:

SELECT *
INTO 新表
FROM 旧表
  • MariaDB、MySQL、Oracle、PostgreSQL和 SQLite使用的不一样
CREATE TABLE 新表
AS 
SELECT * FROM 旧表
  • 利用INSERT INTO SELECT实现表的复制
INSERT INTO 新表 *
SELECT *
FROM 旧表

例如,我们将表oderlist_new2 中的全部数据复制给表oderlist_new文章来源地址https://www.toymoban.com/news/detail-400984.html

INSERT INTO oderlist_new
(goodsName,quantity,item_price,orderNo,userId,userName,orderTime,supplierId)
SELECT   o.`goodsName`   ,
    o.`quantity`    ,
    o.`item_price`  ,
    o.`orderNo`   ,
    o.`userId`  ,
    o.`userName`    ,
    o.`orderTime`   ,
    o.`supplierId`
from oderlist_new2 o

到了这里,关于SQL学习十二、插入数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL学习(六)--DML(针对数据表记录的查询操作)

    目录 一、 单表查询 小拓展: 数据准备: 1.   查询整张表的数据

    2023年04月27日
    浏览(57)
  • 中科大计网学习记录笔记(十二):TCP 套接字编程

    前前言:大家看到这一章节的时候一定不要跳过,虽然标题是编程,但实际上是对 socket 的运行机制做了详细的讨论,对理解 TCP 有很大的帮助;但是由于本节涉及到了大量的编程知识,对于一些朋友来说不是很好理解,所以大家看本节的时候强烈建议结合我的这篇笔记来学习

    2024年02月22日
    浏览(59)
  • 【SQL】循环插入数据

    在实际的开发工作中,需要用到写SQL来循环插入数据,同时又懒的写Java代码来操作数据库进行循环插入。

    2024年02月15日
    浏览(29)
  • SQL优化--插入数据

    如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。 即便是批量插入也不建议一次性插入太多,500-1000条较为合适。如果需要插入更多,建议分割成多次进行插入 为什么批量插入不建议太多 对于批量插入数据,确实不建议一次性插入太多记录,

    2024年02月09日
    浏览(32)
  • SQL——插入已经存在的数据

    现在有一套ID为9003的高难度SQL试卷,时长为一个半小时,请你将 2021-01-01 00:00:00 作为发布时间插入到试题信息表examination_info(其表结构如下图),不管该ID试卷是否存在,都要插入成功,请尝试插入它。 Filed Type Null Key Extra Default Comment id int(11) NO PRI auto_increment (NULL) 自增ID e

    2024年02月06日
    浏览(34)
  • 大数据Doris(五十二):SQL函数之数学函数

    文章目录 SQL函数之数学函数 一、abs(double a)

    2024年02月01日
    浏览(65)
  • SQL Server向表中插入数据

    切换到对应的数据库 插入数据 方式1 注意: 列名就算是字符类型也不用加引号,数据如果对应的字段是字符串类型,需要加引号包裹起来 可以自动增长的字段是可以不用管的(如DepartmentId int primary key identity(1,1)这里就设置了自增,所以在下面的插入中没有该字段 执行完成之

    2024年02月04日
    浏览(56)
  • 【MYSQL】MYSQL 的学习教程(十二)之 MySQL 啥时候用记录锁,啥时候用间隙锁

    在「读未提交」和「读已提交」隔离级别下,都只会使用 记录锁 ;而对于「可重复读」隔离级别来说,会使用 记录锁、间隙锁和 Next-Key 锁 那么 MySQL 啥时候会用记录锁,啥时候会用间隙锁,啥时候又会用 Next-Key 锁呢? 影响其使用哪种行级锁的因素有: 索引类型(聚簇索引

    2024年02月02日
    浏览(41)
  • mysql 学习存储过程:一次插入 10W 条记录、卡死了怎么办

    所有的存储过程必须有前缀“proc_”,所有的系统存储过程都有前缀“sp_”。 输入参数以i_开头,输出参数以o_开头。 mysql use test_20230414; mysql CREATE TABLE person ( id int NOT NULL AUTO_INCREMENT, name varchar(15) NOT NULL, PRIMARY KEY ( id ) ) ENGINE=InnoDB AUTO_INCREMENT=10001 ; 使用事务 不使用事务 查询存

    2024年02月01日
    浏览(50)
  • 【SQL开发实战技巧】系列(八):聊聊如何插入数据时比约束更灵活的限制数据插入以及怎么一个insert语句同时插入多张表

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2024年01月15日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包