MySQL INSERT语句

时间:2019-02-04 12:52:25  来源:igfitidea点击:

MySQL INSERT语句用于将单个记录或多个记录插入到MySQL的表中。

语法

当在MySQL中使用VALUES关键字插入单个记录时,INSERT语句的完整语法为:

INSERT [ LOW_PRIORITY | DELAYED | HIGH_PRIORITY ] [ IGNORE ]
INTO table
(column1, column2, ... )
VALUES
(expression1, expression2, ... ),
(expression1, expression2, ... ),
[ ON DUPLICATE KEY UPDATE 
    dup_column1 = dup_expression1,
    dup_column2 = dup_expression2,
    ... ];

一般只用到简化形式的INSERT语句,即:

INSERT INTO table
(column1, column2, ... )
VALUES
(expression1, expression2, ... ),
(expression1, expression2, ... ),
...;

如果要在MySQL中使用子选择插入多个记录,INSERT语句的完整语法为:

INSERT [ LOW_PRIORITY | HIGH_PRIORITY ] [ IGNORE ]
INTO table
(column1, column2, ... )
SELECT expression1, expression2, ...
FROM source_table
[WHERE conditions]
[ ON DUPLICATE KEY UPDATE 
    dup_column1 = dup_expression1,
    dup_column2 = dup_expression2,
    ... ];

同样,一般只用简单的形式:

INSERT INTO table
(column1, column2, ... )
SELECT expression1, expression2, ...
FROM source_table
[WHERE conditions];
参数说明
LOW_PRIORITY可选的。低优先级。插入操作将被推迟到表没有被读取之后。
DELAYED可选的。延迟。将插入的行放入缓冲区中,直到该表可用并且进程可以处理下一条SQL语句为止。
HIGH_PRIORITY可选的。高优先级。为插入操作赋予更高的优先级,使其优先于数据库的“插入(一般)”优先级。
IGNORE可选的。插入过程中遇到的所有错误都将被忽略,并将错误视为警告。
table要将记录插入到的表。
column1, column2表的字段
expression1,expression2分配给表中各列的值。将expression1的值分配给column1,expression2分配给column2,依此类推。
source_table当插入来自另一个表的数据时的来源表。
WHERE conditions可选的。插入记录时必须满足的条件。
ON DUPLICATE KEY UPDATE可选的。如果插入违反主键或惟一索引的行,则将执行更新操作而不是插入操作。dup_expression1值将被赋值给dup_column1,dup_expression2值将被赋值给dup_column2, 以此类推。

说明
在使用MySQL INSERT语句将记录插入表时,必须为每一个NOT NULL列提供一个值。
如果某一列允许NULL值,则可以省略该列。

MySQL INSERT语句示例

示例-带VALUES关键字的INSERT语句

INSERT INTO suppliers
(supplier_id, supplier_name)
VALUES
(1000, 'Dell');

将一条记录插入Suppliers表中。该新记录的Supplier_id为1000,并且Supplier_name为'Dell'。

示例-使用子选择的INSERT语句

INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE customer_id < 5000;

通过将SELECT语句放入INSERT语句中,可以快速执行多次插入。

使用这种类型的插入,您可能希望确定插入的行数。
在执行插入操作之前,可以通过调用mysql_info函数或者运行以下MySQL SELECT语句来确定要插入的行数。

SELECT count(*)
FROM customers
WHERE customer_id < 5000;