顾名思义,INSERT是用来插入行到数据库表的
插入可以用几种方式使用:
- 插入完整的行
- 插入行的一部分
- 插入多行
- 插入某些查询结果
一、插入完整的行
INSERT INTO customers
VALUES
(
NULL,
'pep',
'100 Street',
'Los Angles',
'CA',
'90046',
'USA',
NULL,
NULL
)
分析:此例子为插入一个新客户到customers表,如果某个列没有值,应该使用NULL(表允许该值为空),第一列cust_id也为NULL,因为这是自动增量
上面的语法很简单,但并不安全,因为它高度依赖于表中列的定义次序,也不能保证下一次表结构变动后的次序和原来相同。
我们来改动一下INSERT语句,使它更安全。
INSERT INTO customers
(
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email
)
VALUES
(
'pep',
'100 Street',
'Los Angles',
'CA',
'90046',
'USA',
NULL,
NULL
)
分析:我们给出了明确的列名,在插入时只需保证value与之对应就行了。而且该列的顺序与表中定义的顺序可以不同
省略列的情况:
- 该列定义为允许NULL值(无值或空值)
- 该列定义给出了默认值
- 如果表中不允许为NULL且没有默认值的列,插入时不给出值,则会报错
二、插入多个行
每一组值用圆括号括起来,用逗号分隔,此技术可以提高数据库处理的性能,因为单条语句比多条语句执行速度块
INSERT INTO customers
(
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
)
VALUES
(
'pep',
'100 Street',
'Los Angles',
'CA',
'90046',
'USA'
),
(
'aaa',
'31 Street',
'New York',
'NY',
'11232',
'CHINA'
);
三、插入检索出的数据
加入你想把一张表的数据插入到另一张表,你可以使用插入查询INSERT SELECT.
INSERT INTO customers
(
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
)
SELECT
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM custnew;
这个例子使用INSERT SELECT从custnew中将所有数据插入到customers。
MySQL不关心SELECT返回的列名,因此SELECT的第一列值将用来填充INSERT中指定的第一列。这对于使用不同列名的表中导入数据是非常有用的。