SQL-INSERT-插入数据
INSERT 用来将行插入(或添加)到数据库表。
插入有几种方式:
- 插入完整的行;
- 插入行的一部分;
- 插入某些查询的结果。
使用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操作中省略某些列。省略的列必须满足以下某个条件:
- 该列定义为允许NULL值(无值或空值)。
- 在表定义中给出默认值。这表示如果不给出值,将使用默认值。
如果对表中不允许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-插入数据相关推荐
- oracle exp 无效dblink,【案例】Oracle dblink 数据库连接dblink insert插入数据时异常分析...
天萃荷净 开发DBA反映在测试数据表插入数据,Oracle dblink两库连接插入同步数据时数据量异常 一.诡异Oracle dblink起源 今天开发拿过来一条sql,说有诡异现象,sql如下 I ...
- insert 插入数据
目录 insert 插入数据(DML) 1.语法格式 insert into t_student(no) values(3); 2.指定字段的默认值 insert into t_student(no) ...
- 将EXCEL中的列拼接成SQL insert插入语句
工作中经常需要将EXCEL文件中的数据导入到各种数据库,但是对于不熟悉数据库的人来说,如果直接使用命令执行导入,这无疑是一个难题,也是一个风险.这里我们直接在EXCEL文件中拼接成标准的SQL ins ...
- mysql 插入记录慢_mysql:insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决...
问题: 最近在做性能测试,造数据,发现insert好慢,只有几十条每秒,很奇怪,最后再网上找到了原因. 网文如下: MY SQL insert 速度过慢 最近在用MySQL做存储,测试中发现插入数据太 ...
- sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析
假定我们的表结构如下: CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value VARCH ...
- SQL:插入数据的小坑
在SQL Server中,不管是存储过程还是自定义函数中,经常需要进行插入数据的操作.在插入数据的时候,很多人选择如下方式 INSERT INTO DestinationTable SELECT Co ...
- Hibernate JPA中insert插入数据后自动执行select last_insert_id()解决方法
本文出处:http://blog.csdn.net/chaijunkun/article/details/8647281,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...
- SQL SERVER插入数据操作
准备工作: 我需要一张User表,这张表有几个字段,还有一个自增长的数字id,表结构如下: 这是一张比现实应用中简单的多的用户表,UserID是自增长字段. 开始执行一个最简单的INSERT: ? 1 ...
- Android复习07【创建数据库、insert()插入数据、查看数据库、根据列索引获取参数值、根据列名-返回索引、增删改查数据、数据分页、修改表结构、Room框架】
2020-04-09-星期四-第八周 目 录 创建数据库 insert()方法 查看数据库(Save as保存) 菜鸟教程---SQLite数据库 根据 列索引 获取 参数值 列比较多---根据列 ...
- sql 批量插入数据到Sqlserver中 效率较高的方法
使用SqlBulk #region 方式二 static void InsertTwo() { Console.WriteLine("使用Bulk插入的实现方式"); Stopwa ...
最新文章
- JMF介绍之媒体框架二
- Python-OpenCV 笔记3 -- 霍夫变换(Hough)
- php中$_get和$_post如何使用,怎么使用超级全局变量$_POST与$_GET
- 详谈如何定制自己的博客园皮肤【转】
- Bootstrap 禁用导航链接
- FOR ALL ENTRIES的原理:
- 娱乐篇第十期:互联网的事情you意思(十)
- java万年历算法_寿星万年历---java算法实现
- 计算机网络原理题答案第三章,计算机网络原理第三章习题(含答案).doc
- 服务器配置参数主要有哪些
- Google earth 生成研究区适量边界(2)矢量边界图的空间配准
- win10鼠标不受控制乱动_Win10到底藏有多少好东西?这些功能少为人知,却都让人无法拒绝...
- 个人知识体系你了解多少?
- svn 认证失败请看解决办法
- Eclipse 安装 Jrebel插件
- China-Final2016K Justice Rains From Above
- 陈宝存:追求财富不可耻,羡慕嫉妒恨才可耻(转)
- 信捷服务器Z相信号,信捷电气DP3C系列总线型步进驱动器上市
- 离散数学——集合论(一)
- 产品工作中的沟通注意事项小总结