MySQL通过INSERT来插入行到数据库表中,通常有以下几种情况:
  1.插入完整的行;
  2.插入行的一部分;
  3.插入多行;
  4.插入某些查询的数据。

一、插入完整的行

  下面为插入一行数据到表customers中的例子:

USE crashcourse;
INSERT INTO customers (
    cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country,
    cust_contact,
    cust_email
)
VALUES (
    'Pep E. LaPew',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA',
    'NULL',
    'NULL'
);

执行结果:
这里写图片描述
提示插入成功,再查看该表:
这里写图片描述

发现最后一行为刚才插入的数据。刚才给出的例子是在表名后的括号中明确给出了列名,在插入时MySQL将用VALUES列表中的相应值填入列表中的对应项。即VALUES中的第一个值对应于第一个指定的列名,第二个值对应第二个列名,以此类推。因为提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各个列出现的实际表中的次序。这种方法的优点是即使表的结构改变,此INSERT语句任然可以正常工作。而且可以省略允许省略的列。下面为不指定列名插入数据的例子,必须按表中的实际顺序插入,且不能省略任何列:

INSERT INTO customers 
VALUES (
    NULL,
    'Pep E. LaPew',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA',
    'NULL',
    'NULL'
);

省略列: 如果在表的定义允许,则可以在INSERT操作中省略某些列。省略的列必须满足一下某个条件:
  1.该列定义为允许NULL值(无值或空值);
  2.在表中定义了给出默认值。这表示如果不给出值,将使用默认值。

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

二、插入多行

  插入多行和插入单行类似,只是在VALUES中用逗号把每一组值分隔开来即可,下面为例子:

INSERT INTO customers (
    cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country
)
VALUES (
    'Pep E. LaPew',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA'
),
(
    'M. Martian',
    '42 Galaxy Way',
    'New York',
    'NY',
    '11213',
    'USA'   
);
三、插入检索出的数据

  INSERT可以将一条SELECT语句的结果插入表中,这就是所谓的INSERT SELECT。如果想要把两张表合并为一张表,不需要每次读取一行,然后将它用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;

  在这个例子中INSERT和SELECT语句使用了相同的列名。但是不一定要求列名匹配,事实上,MySQL甚至不关心SELECT返回的列名。它使用的是列的位置,因此SELECT中的第一列将用来填充表列中指定的第一个列,第二列将用来填充表列中的第二列,如此等等。这对于从使用不同列名的表中导入数据是非常有用的。

  INSERT SELECT中SELECT语句可以包含WHERE语句以过滤插入的数据。

Logo

更多推荐