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语句以过滤插入的数据。