『MySQL』插入数据
数据插入
INSERT
是用来插入(或添加)行到数据库表的。插入可以用以下几种方式使用:
- 插入完整的行;
- 插入行的一部分;
- 插入多行;
- 插入某些查询的结果。
插入及系统安全:可针对每个表或每个用户,利用MySQL的安全机制禁止使用
INSERT
语句。
插入完整的行
1 | INSERT INTO customers |
没有输出:
INSERT
语句一般不会产生输出。MySQL自动增量:你不想给出一个值(这是MySQL的工作),又不能省略此列(必须给出每个列),所以指定一个
NULL
值(它被MySQL忽略,MySQL在这里插入下一个可用的cust_id值)。虽然上述语法简单,但不安全。
编写
INSERT
语句的更安全(不过更繁琐)的方法如下:
1 | INSERT INTO customers( |
总是使用列的列表:使用列的列表能使SQL代码继续发挥作用,即使表结构发生了变化。
省略列:省略列必须满足以下条件:
- 该列定义为允许
NULL
值(无值或空值); - 在表定义中给出默认值。这表示如果不给出值,将使用默认值。
- 该列定义为允许
提高整体性能:
INSERT
操作在很多索引需要更新时可能很耗时,而且可能降低等待处理的SELECT
语句的性能。如果数据检索是最重要的(通常是这样),则可以通过在
INSERT
和INTO
之间添加关键字LOW_PRIORITY
(INSERT LOW_PRIORITY INTO
),指示MySQL降低INSERT
语句的优先级。此关键字也适用于
UPDATE
和DELETE
语句。
插入多个行
INSERT
可以插入一行到一个表中。插入多个行可以使用多条
INSERT
语句,甚至一次提交他们。
1 | INSERT INTO customers( |
- 提高INSERT的性能:此技术可以提高数据库处理的性能,因为MySQL用单条
INSERT
语句处理多个插入比使用多条INSERT
语句快。
插入检索出的数据
1 | -- 使用INSERT SELECT从custnew中将所有数据导入customers |
INSERT SELECT中的列名:
INSERT
和SELECT
语句不一定要求列名匹配。MySQL不关心
SELECT
返回的列名,它使用的是列的位置。SELECT
中的第一列(不管其列名)将用来填充表列中指定的第一个列,第二列填充表列中指定的第二个列,如此等等。这对于从使用不同列名的表中导入数据是非常有用的。
INSERT SELECT
中SELECT
语句可包含WHERE
子句以过滤插入的数据。更多例子:如果想看
INSERT
用法的更多例子,请参阅附录B中给出的样例表填充脚本。