SQL的插入

  一、数据的插入

  1、插入的关键字:INSERT INTO,在某些SQL实现中,可以去掉INTO关键字,不过最好还是提供INTO这个关键字,保证SQL代码可移植性。

  2、插入的方式:

  • 插入完整的行

  示例代码如下:

INSERT INTO table_name
VALUES(''column1_value, 'column2_value', 'column3_value', 'column4_value');

  存储在table_name表中每一列的数据在VALUES子句中给出,必须给每一列提供一个值,如果某列没有值,那么应该使用NULL值(需要该列支持空值);这里需要注意了,各列必须以它们在表中定义中出现的次序填充,这样的语句高度依赖表中列的定义次序,并不安全,迟早会出问题的,最好不要这样使用。我们可以指出全部的列名,来达到安全性,不过比较繁琐,示例代码如下:

INSERT INTO table_name(column1, column2, column3, column4)
VALUES('column1_value', 'column2_value', column3_value'', 'column4_value')

  这种方式的优点就是,即使表的结构改变,该语句也能正确工作;此外,因为提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各列出现在表中的实际次序。

  • 插入行的一部分:这种方式就是指给出表中部分的列,此时省略的列必须满足以下两个条件中的任一个:
    • 该列定义为允许NULL值(无值或空值)
    • 在表中定义中给出默认值。
  • 插入某些查询的结果

  通过INSERT SELECT,可以实现将SELECT语句的结果插入表中,同时也是实现了一条INSERT语句插入多行的功能,因为INSERT通常只插入一行,要是插入多行的,那么必须执行多个INSERT语句。示例代码如下:

INSERT INTO table_name1(t1_column1, t1_column2, t1_column3, t1_column4)
SELECT t2_column1, t2_column2, t2_column3, t2_column4
FROM table_name2

  在使用INSERT SELECT时,若从SELECT检索出来的数据中包含了主键值,那么必须保证相同的主键值行数据在INSERT插入的表中是没有数据的,否则会导致后续的INSERT操作失败。

  INSERT插入的列与SELECT检索出的列,列名出可以不用保持一致,因为它们之间是通过列位置来关联的,也就是SELECT检索出来的第一列,在INSERT插入中就是第一列,以此类推。

  二、数据的导出

  前面说的的内容都是通过INSERT语句来实现数据插入表格中,其实还有另外一种方式,也可以实现数据复制,这就是SELECT INTO语句。示例代码如下:

SELECT *
INTO table_1
FROM table_2;

  上述语句的含义是将table_2表中的数据复制到table_1表中。在某些DBMS中可以覆盖已存在表,所以要特别注意。该语句在实现复制表格数据是很好用的工具,例如开发人员可以在复制的数据上进行SQL代码测试,不用担心影响实际的数据。

  有关SELECT INTO语句,需要了解的事项:

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

  三、INSERT SELECT和SELECT INTO的差异

  • INSERT SELECT之前必须要创建好INSERT将要插入的表,而SELECT INTO不需要事先创建表,它会在运行过程中创建新表;
  • INSERT SELECT语句是插入数据,而SELECT INTO语句是复制数据、导出数据,某些熟悉不会复制过来,比如主键信息。
posted @ 2020-05-12 23:46  晒太阳的兔子很忙  阅读(5041)  评论(0编辑  收藏  举报