首页Mysql插入数据insert into
Created At : 2021-11-13
Last Updated: 2022-01-10

Mysql插入数据 insert into

MySQL中使用INSERT INTO语句向数据库表中插入新的数据记录。可以插入的方式有插入完整的记录、插入记录的一部分、插入多条记录、插入另一个查询的结果。

语法

-- 完整语法
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
 [INTO] tbl_name
 [PARTITION (partition_name [, partition_name] ...)]
 [(col_name [, col_name] ...)]
 { {VALUES | VALUE} (value_list) [, (value_list)] ...
 |
 VALUES row_constructor_list
 }
 [AS row_alias[(col_alias [, col_alias] ...)]]
 [ON DUPLICATE KEY UPDATE assignment_list]
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
 [INTO] tbl_name
 [PARTITION (partition_name [, partition_name] ...)]
 [AS row_alias[(col_alias [, col_alias] ...)]]
 SET assignment_list
 [ON DUPLICATE KEY UPDATE assignment_list]
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
 [INTO] tbl_name
 [PARTITION (partition_name [, partition_name] ...)]
 [(col_name [, col_name] ...)]
 [AS row_alias[(col_alias [, col_alias] ...)]]
 {SELECT ... | TABLE table_name}
 [ON DUPLICATE KEY UPDATE assignment_list]
 
 
-- value:
 {expr | DEFAULT}
-- value_list:
 value [, value] ...
-- row_constructor_list:
 ROW(value_list)[, ROW(value_list)][, ...]
-- assignment:
 col_name = [row_alias.]value
-- assignment_list:
 assignment [, assignment] ...
 
 
-- 简单语法
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3), (4,5,6), (7,8,9);

为所有字段插入数据

  • 方法1:
INSERT INTO tbl_name (col1,col2) VALUES(15,20);

⚡ 注意,使用该语句时字段列和数据值的数量必须相同。

INSERT语句后面的列名称顺序可以不是表定义时的顺序。

即插入数据时,不需要按照表定义的顺序插入,只要保证值的顺序与列字段的顺序相同就可以。

  • 方法2(不推荐)
INSERT INTO tbl_name VALUES(15,20);

此时,值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同。

为表的指定字段插入数据

为表的指定字段插入数据,就是在INSERT语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。

INSERT INTO tbl_name (col1,col2) VALUES(15,20);

同时插入多条记录

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3), (4,5,6), (7,8,9);

一个同时插入多行记录的INSERT语句等同于多个单行插入的INSERT语句.

但是多行的INSERT语句在处理过程中效率更高。

将查询结果插入到表中

INSERT还可以将SELECT语句查询的结果插入到表中.

INSERT INTO tbl_temp2 (fld_id)
 	SELECT tbl_temp1.fld_order_id
 	FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;

使用MySQL8的 insert into table将查询结果插入到表中

针对 INSERT ... SELECT语句,从 MySQL 8.0.19开始,可以使用 TABLE statement 代替 SELECT子句。

语法为:

INSERT INTO ta TABLE tb;
-- TABLE tb is equivalent to SELECT * FROM tb.
-- 是用于插入所有数据

操作演示

-- 现有tb2,数据如下
select * from tb1;
-- 数据如下
name    |age|score|
--------+---+-----+
Jack    |18 |61   |
XiaoMa  |28 |88   |
Lucy    |16 |57   |
Zhangsan|19 |     |

-- 准备一张空表
create table tb2 like tb1;
select * from tb2;

-- 将tb1的所有数据查询出来插入tb2
insert into  tb2 table tb1;
-- 查询tb2数据
select * from tb2;
-- 结果如下
name    |age|score|
--------+---+-----+
Jack    |18 |61   |
XiaoMa  |28 |88   |
Lucy    |16 |57   |
Zhangsan|19 |     |