博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL 必知必会·笔记<13>插入数据
阅读量:6573 次
发布时间:2019-06-24

本文共 2421 字,大约阅读时间需要 8 分钟。

INSERT 用来将行插入(或添加)到数据库表。插入有几种方式:

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

 

1.1 插入完整的行

存储到表中每一列的数据在VALUES 子句中给出,必须给每一列提供一个值。如果某列没有值,则应该使用NULL 值(假定表允许对该列指定空值)。各列必须以它们在表定义中出现的次序填充。基本的INSERT 语法:

1 //INTO 关键字是可选的 2 INSERT INTO Customers 3 VALUES('1000000006', 4        'Toy Land', 5        '123 Any Street', 6        'New York', 7        'NY', 8        '11111', 9        'USA',10        NULL,11        NULL);

 

使用上面的语法虽然简单,但是并不安全,应该尽量避免使用。因为上面的SQL语句依赖于表中列定义的顺序,还依赖于其获得的次序信息,即使可以得到这种次序信息,也不能保证各列在下一次表结构变动后保持完全相同的次序。因此,不建议编写依赖于特定列次序的SQL。

更可靠的版本(也更繁琐)如下:

1 INSERT INTO Customers(cust_id, 2                       cust_name, 3                       cust_address, 4                       cust_city, 5                       cust_state, 6                       cust_zip, 7                       cust_country, 8                       cust_contact, 9                       cust_email)10 VALUES('1000000006',11        'Toy Land',12        '123 Any Street',13        'New York',14        'NY',15        '11111',16        'USA',17        NULL,18        NULL);

 

提示:总是使用列的列表

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

 

1.2 插入部分行

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

注意:省略列

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

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

 

1.3 插入检索出的数据

INSERT语句可以将SELECT 语句的结果插入表中,这就是所谓的INSERT SELECT。

假如把另一表中的顾客列合并到Customers 表中,不需要每次读取一行再将它用INSERT 插入,可以如下进行:

1 INSERT INTO Customers(cust_id, 2                       cust_contact, 3                       cust_email, 4                       cust_name, 5                       cust_address, 6                       cust_city, 7                       cust_state, 8                       cust_zip, 9                       cust_country)10 SELECT cust_id,11        cust_contact,12        cust_email,13        cust_name,14        cust_address,15        cust_city,16        cust_state,17        cust_zip,18        cust_country19 FROM CustNew;

 

提示:插入多行

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

 

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

使用SELECT INTO将数据复制到一个新表(有的DBMS 可以覆盖已经存在的表,这依赖于所使用的具体DBMS)。看下面的示例:

1 SELECT *2 INTO CustCopy3 FROM Customers;

 上面的语句创建一个名为CustCopy 的新表,并把Customers 表的整个内容复制到新表中。因为这里使用的是SELECT *,所以将在CustCopy 表中创建(并填充)与Customers 表的每一列相同的列

 

注意事项

  • 任何SELECT 选项和子句都可以使用,包括WHERE 和GROUP BY;
  • 可利用联结从多个表插入数据;
  • 不管从多少个表中检索数据,数据都只能插入到一个表中。

 

提示:进行表的复制

  • SELECT INTO 是试验新SQL 语句前进行表复制的很好工具。先进行复
  • 制,可在复制的数据上测试SQL 代码,而不会影响实际的数据。

转载地址:http://peojo.baihongyu.com/

你可能感兴趣的文章
[Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
查看>>
【Android视图效果】分组列表实现吸顶效果
查看>>
title: postGreSQL 插件 timescaleDB 安装使用 date: 2019-02-14 18:02:23
查看>>
并发容器与框架——并发容器(一)
查看>>
网络编程socket
查看>>
学界 | 伯克利最新研究:用算法解决算法偏差?公平机器学习的延迟影响
查看>>
多文件上传示例源码(默认支持各种类型,包括图片)
查看>>
JS 中如何判断 undefined 和 null
查看>>
9.2. CentOS 区域设置
查看>>
命令行基本操作学习笔记(一)
查看>>
「试着读读 Vue 源代码」工程目录及本地运行(断点调试)
查看>>
Oracle——16用户、角色和权限
查看>>
获得系统属性
查看>>
从0实现NavigationController
查看>>
A Visual Git Reference
查看>>
Tomcat 关于表单提交数据量过大导致数据丢失的问题
查看>>
gitlab hook declined错误
查看>>
金融数据库
查看>>
翻了100个程序员的朋友圈, 发现个个都是套路王
查看>>
取消从上一界面push过来后,左上角的back按钮
查看>>