SQL 插入数据

SQL 插入数据

一、数据插入:

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

  • 插入有几种方式:

    1.插入完整的行。

    2.插入行的一部分。

    3.插入某些查询的结果。

  • 注意:插入及系统安全

    • 使用INSERT语句可能需要客户端/服务器DBMS中的特定安全权限。在你试图使用INSERT前,应该保证自己有足够的安全权限。
1.1:插入完整的行:
  • 把数据插入表中的最简单方法是使用基本的INSERT语法,指定表名和插入到新行中的值

    INSERT  INTO  Customers VALUES (
      '10000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL
    )
    
    • 将顾客信息插入到Customers表中。存储到表中每一列的数据再VALUES子句中给出,必须给每一项提供一个值
    • 如果某列没有值,则应该使用NULL值(假定表允许对该列指定空值)
    • 各列必须以它们再表定义中出现的次序填充。
  • 注意:INTO 关键字

    • 再某些SQL实现中,跟在INSERT之后的INTO关键字是可选的。
  • 上面的SQL语句高度依赖于表中列的定义次序,还依赖于其容易获得的次序信息。即使可以得到这种次序信息,也不能保证各列再下一次表结构变动后保持完全相同的次序。因此编写依赖于特定列次序的SQL语句是很不安全的。

  • 编写INSERT语句的更安全(不过更烦琐)

    INSERT INTO Customers (
        cust_id,
        cust_name,
        cust_address,
        cust_city,
        cust_state,
        cust_zip,
        cust_country,
        cust_contact,
        cust_email
    )
    VALUES (
        '100000006',
        'Fe Cow',
        'QIQIHER',
        'USA',
        'NY',
        '161041',
        'USA',
        NULL,
        NULL
    );
    
    • 再表名后的括号里明确给出了列名。
    • 再插入行时,DBMS将用VALUES列表中的相应值填入列表中的对应项。
    • VALUES中的第一个值对应于第一个指定列名,第二个值对应第二个指定列名
    • 优点:
      • 即使表的结构改变,这条INSERT语句仍然能正确的工作。
  • 提示:总是使用列的列表

    • 不要使用没有明确给出列的INSERT语句。
  • 注意:小心使用VALUES

    • 不管使用哪种INSERT语法,VALUES的数目必须正确
    • 如果不提供列名,则必须给每个列提供一个值;如果提供列名,则必须给列出的每个列一个值
1.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'
    );
    
    • 再前面的栗子中,没有给出cust_contact和cust_email这两列提供值。这表示没有必要再INSEERT语句中包含它们。因此这里省略了这两列及其对应的值。
  • 注意:省略列

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

      1.该列定义为允许NULL值(无值或空值)。

      2.再表定义中给出默认值。(这表示如果不给出值,将使用默认值)

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

  • 注意:省略所需的值

    • 如果表中不允许有NULL值或者默认值,这时却省略了表中的值,DBMS就会产生错误信息,相应的行不能成功插入。
1.3:插入检索出的数据:
  • INSERT一般用来给表插入具有指定列值的行。

  • INSERT还存在另一种形式,可以利用它将SELECT语句的结果插入表中,这就是所谓的INSERT SELECT。

  • 假如把另一个表中的顾客列合并到Customers表中:

    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;
    
    • 例子使用INSERT SELECT从CustNew中将所有数据导入Customers。
    • SELECT语句从CustNew检索出要插入的值,而不是列出它们。
    • SELECT中列出的每一列对应于Customers表名后所跟的每一列。
  • 注意:INSERT SELECT中的列名

    • 在INSERT和SELECT语句中使用了相同的列名。但是,不一定要求列名匹配。
    • 它使用的是列的位置,因此SELECT中的第一列(不管其列名)将用来填充表列中指定的第一列,第二列将用来填充表列中指定的第二列,如此等等。
    • INSERT SELECT中SELECT语句可以包含WHERE子句,以过滤插入的数据。
  • 注意:插入多行

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

二、从一个表复制到另一个表:

  • 有一种数据插入不使用INSERT语句。要将一个表的内容复制到一个全新的表(运行中创建的表),可以使用SELECT INTO语句。

    CREATE TABLE CustCopy AS
    SELECT * FROM Customers;
    
    • 将Customers表中的数据,复制到了CustCopy表中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值