INSERT 用来将行插入(或添加)到数据库表。

插入有几种方式:

  1. 插入完整的行;
  2. 插入行的一部分;
  3. 插入某些查询的结果。

使用INSERT语句可能需要客户端/服务器DBMS中的特定安全权限。在试图使用INSERT前,应该保证自己有足够的安全权限。

1. 插入完整的行

INSERT INTO customers
VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111','USA',NULL,NULL);

各列必须以它们在表中出现的次序填充。

INTO关键字:在某些SQL实现中,跟在INSERT之后的INTO关键字是可选的。

编写INSERT语句的更安全(不过更烦琐)的方法如下:

INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email)
VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111','USA',NULL,NULL);

注意:因为提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各列出现在表中的实际次序。其优点是,即使表的结构改变,这条INSERT语句仍然能正确工作。

INSERT INTO Customers(cust_id,cust_contact,cust_email,cust_name,cust_address,cust_city,cust_state,cust_zip)
VALUES('1000000006',NULL,NULL,'Toy Land','123 Any Street','New York','NY','11111');

总是使用列的列表
一般不要使用没有明确给出列的INSERT语句。给出列能使SQL代码继续发挥作用,即使表结构发生了变化。

2. 插入部分行

使用INSERT的推荐方法是明确给出表的列名。使用这种语法,还可以省略列,这表示可以只给某些列提供值,给其他列不提供值。

INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country)
VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111','USA');

省略列

如果表的定义允许,则可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件:

  1. 该列定义为允许NULL值(无值或空值)。
  2. 在表定义中给出默认值。这表示如果不给出值,将使用默认值。

如果对表中不允许NULL值且没有默认值的列不给出值,DBMS将产生错误消息,并且相应的行插入不成功。

不管使用哪种INSERT语法,VALUES的数目都必须正确。如果不提供列名,则必须给每个表列提供一个值;如果提供列名,则必须给列出的每个列一个值。否则,就会产生一条错误消息,相应的行不能成功插入。

3. 插入检索出的数据

利用INSERT将SELECT语句的结果插入表中,这就是所谓的INSERT SELECT。顾名思义,它是由一条INSERT语句和一条SELECT语句组成。

-- 把另一表中的顾客列合并到Customers表中。不需要每次读取一行再将它用INSERT插入
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;

如果CustNew表为空,则没有行被插入(也不产生错误,因为操作仍然是合法的)。如果这个表确实有数据,则所有数据将被插入到Customers。

INSERT SELECT中的列名

DBMS一点儿也不关心SELECT返回的列名。它使用的是列的位置,因此SELECT中的第一列(不管其列名)将用来填充表列中指定的第一列,第二列将用来填充表列中指定的第二列,如此等等。

插入多行

INSERT通常只插入一行。要插入多行,必须执行多个INSERT语句。INSERT SELECT是个例外,它可以用一条INSERT插入多行,不管SELECT语句返回多少行,都将被INSERT插入。

4. 从一个表复制到另一个表

SELECT INTO语句:将一个表的内容复制到一个全新的表(运行中创建的表)。

DB2不支持这里描述的SELECT INTO。

INSERT SELECT 与 SELECT INTO
它们之间的一个重要差别是前者导出数据,而后者导入数据。

-- 创建一个名为custcopy的新表,并把customers表的整个内容复制到新表中
SELECT * INTO custCoty FROM customers;-- MariaDB、MySQL、Oracle、PostgreSQL和SQLite所使用的语法
CREATE TABLE custcopy AS
SELECT * FROM customers;

SELECT使用*通配符:导入所有数据。
SELECT使用列名:导入部分的列。

使用SELECT INTO复制表,可在复制的数据上测试SQL代码,而不会影响实际的数据。

注意:
1. 数据库字符串使用单引号。
2. 数据库大小写不敏感。
3. cuid算法是一种可以产生唯一标识的高效算法,它使用网卡MAC,地址,纳米级时间、芯片ID等算出来的:select newid();

SQL-INSERT-插入数据相关推荐

  1. oracle exp 无效dblink,【案例】Oracle dblink 数据库连接dblink insert插入数据时异常分析...

    天萃荷净 开发DBA反映在测试数据表插入数据,Oracle dblink两库连接插入同步数据时数据量异常 一.诡异Oracle dblink起源 今天开发拿过来一条sql,说有诡异现象,sql如下 I ...

  2. insert 插入数据

    目录 insert 插入数据(DML) 1.语法格式 insert into t_student(no) values(3); 2.指定字段的默认值 insert into t_student(no) ...

  3. 将EXCEL中的列拼接成SQL insert插入语句

    工作中经常需要将EXCEL文件中的数据导入到各种数据库,但是对于不熟悉数据库的人来说,如果直接使用命令执行导入,这无疑是一个难题,也是一个风险.这里我们直接在EXCEL文件中拼接成标准的SQL ins ...

  4. mysql 插入记录慢_mysql:insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决...

    问题: 最近在做性能测试,造数据,发现insert好慢,只有几十条每秒,很奇怪,最后再网上找到了原因. 网文如下: MY SQL insert 速度过慢 最近在用MySQL做存储,测试中发现插入数据太 ...

  5. sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析

    假定我们的表结构如下: CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value VARCH ...

  6. SQL:插入数据的小坑

    在SQL Server中,不管是存储过程还是自定义函数中,经常需要进行插入数据的操作.在插入数据的时候,很多人选择如下方式 INSERT INTO DestinationTable SELECT Co ...

  7. Hibernate JPA中insert插入数据后自动执行select last_insert_id()解决方法

    本文出处:http://blog.csdn.net/chaijunkun/article/details/8647281,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...

  8. SQL SERVER插入数据操作

    准备工作: 我需要一张User表,这张表有几个字段,还有一个自增长的数字id,表结构如下: 这是一张比现实应用中简单的多的用户表,UserID是自增长字段. 开始执行一个最简单的INSERT: ? 1 ...

  9. Android复习07【创建数据库、insert()插入数据、查看数据库、根据列索引获取参数值、根据列名-返回索引、增删改查数据、数据分页、修改表结构、Room框架】

    2020-04-09-星期四-第八周 目   录 创建数据库 insert()方法 查看数据库(Save as保存) 菜鸟教程---SQLite数据库 根据 列索引 获取 参数值 列比较多---根据列 ...

  10. sql 批量插入数据到Sqlserver中 效率较高的方法

    使用SqlBulk #region 方式二 static void InsertTwo() { Console.WriteLine("使用Bulk插入的实现方式"); Stopwa ...

最新文章

  1. JMF介绍之媒体框架二
  2. Python-OpenCV 笔记3 -- 霍夫变换(Hough)
  3. php中$_get和$_post如何使用,怎么使用超级全局变量$_POST与$_GET
  4. 详谈如何定制自己的博客园皮肤【转】
  5. Bootstrap 禁用导航链接
  6. FOR ALL ENTRIES的原理:
  7. 娱乐篇第十期:互联网的事情you意思(十)
  8. java万年历算法_寿星万年历---java算法实现
  9. 计算机网络原理题答案第三章,计算机网络原理第三章习题(含答案).doc
  10. 服务器配置参数主要有哪些
  11. Google earth 生成研究区适量边界(2)矢量边界图的空间配准
  12. win10鼠标不受控制乱动_Win10到底藏有多少好东西?这些功能少为人知,却都让人无法拒绝...
  13. 个人知识体系你了解多少?
  14. svn 认证失败请看解决办法
  15. Eclipse 安装 Jrebel插件
  16. China-Final2016K Justice Rains From Above
  17. 陈宝存:追求财富不可耻,羡慕嫉妒恨才可耻(转)
  18. 信捷服务器Z相信号,信捷电气DP3C系列总线型步进驱动器上市
  19. 离散数学——集合论(一)
  20. 产品工作中的沟通注意事项小总结

热门文章

  1. c++ 枚举系统字体
  2. MMD导入Unity利用MMD4Mecanim转化MMD模型
  3. win10 关闭病毒和威胁防护
  4. 三菱服务器显示003C,三菱电机空调出现故障代码大全及原因
  5. 大工19《计算机应用基础》在线测试2,大工19春《计算机应用基础》在线测试2 在Excel 2010中 存储数据的表格被称为...
  6. 音视频 RTMP协议分析
  7. 商标TM和R有什么区别
  8. 机器学习十大算法---10. 马尔科夫
  9. 《数据结构与算法》之课程实验
  10. 蓝汛CEO推动CHN-IX发展,为互联网行业增效减负