MySQL INSERT语句详解,从基础语法到高效数据插入技巧

文章导读
INSERT语句的基本语法是INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); 这是一个最简单的单行插入方式。例如,INSERT INTO users (name, age) VALUES ('张三', 25); 执行后会在users表中插入一条记录。
📋 目录
  1. 基础语法
  2. 多行插入
  3. INSERT IGNORE
  4. ON DUPLICATE KEY UPDATE
  5. 批量插入技巧
  6. 延迟插入列
A A

INSERT语句的基本语法是INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); 这是一个最简单的单行插入方式。例如,INSERT INTO users (name, age) VALUES ('张三', 25); 执行后会在users表中插入一条记录。

基础语法

MySQL的INSERT语句用于向数据库表中插入新数据。其基本语法如下: INSERT INTO 表名 (字段1,字段2,...) VALUES (值1,值2,...); 如果要插入所有字段,可以省略字段列表: INSERT INTO 表名 VALUES (值1,值2,...); 注意,字段和值的数量必须匹配,数据类型也要对应。

多行插入

为了提高效率,MySQL支持一次性插入多行数据: INSERT INTO table_name (col1, col2) VALUES (row1_val1, row1_val2), (row2_val1, row2_val2), ...; 这种方式比多次执行单行INSERT快很多,尤其在大批量数据时。

MySQL INSERT语句详解,从基础语法到高效数据插入技巧

INSERT IGNORE

当遇到主键冲突时,使用INSERT IGNORE可以忽略错误继续插入其他行: INSERT IGNORE INTO table_name (id, name) VALUES (1, 'test'), (2, 'test2'); 如果id=1已存在,只插入id=2的行,不会报错。

ON DUPLICATE KEY UPDATE

这是高效技巧,当主键冲突时更新而不是报错: INSERT INTO table_name (id, count) VALUES (1, 10) ON DUPLICATE KEY UPDATE count = count + 10; 这样既插入新数据,也能原子性更新现有数据。

批量插入技巧

对于海量数据,推荐关闭自动提交: SET autocommit = 0; 然后执行多行INSERT,最后 COMMIT; 这能显著提升性能。另外,使用LOAD DATA INFILE从文件快速导入: LOAD DATA INFILE 'data.txt' INTO TABLE table_name FIELDS TERMINATED BY ',';

MySQL INSERT语句详解,从基础语法到高效数据插入技巧

延迟插入列

使用INSERT ... SELECT从其他表高效复制数据: INSERT INTO new_table SELECT * FROM old_table WHERE condition; 这避免了手动构建VALUES,非常适合数据迁移。

FAQ
Q: INSERT和REPLACE的区别是什么?
A: INSERT遇到主键冲突报错,REPLACE会先DELETE再INSERT,可能影响自增ID。
Q: 如何插入NULL值?
A: 直接用NULL,如VALUES ('name', NULL); 或省略可空字段。
Q: 批量插入多少行最优?
A: 一般每批1000-5000行,根据服务器内存调整。
Q: INSERT失败如何回滚?
A: 在事务中用ROLLBACK,未开启事务则不可回滚。