MySQL中INSERT语句需明确表名、字段及对应值,字段与值数量、类型、顺序须严格匹配;推荐显式指定字段名,支持多行插入和INSERT...SELECT跨表导入。

MySQL 中使用 INSERT 语句向表中添加新数据,核心是明确目标表、字段和对应值。语法灵活,但需注意字段与值的数量、类型、顺序必须匹配,否则会报错。
基础 INSERT 语法(指定字段)
推荐始终显式写出字段名,提高可读性和健壮性:
INSERT INTO 表名 (字段1, 字段2, 字段3) VALUES (值1, 值2, 值3);
- 字段名用英文逗号分隔,括号不能省略
-
VALUES后的值顺序必须与前面字段顺序严格一致 - 字符串值用单引号
' '包裹,数字和NULL不加引号 - 例如:
INSERT INTO users (name, age, email) VALUES ('张三', 25, 'zhang@example.com');
省略字段名的写法(慎用)
仅当为表中所有非空且无默认值的字段都提供值时才可用:
INSERT INTO 表名 VALUES (值1, 值2, 值3);
- MySQL 按表结构定义的字段顺序依次赋值
- 一旦表结构变更(如新增字段),该语句极易出错
- 不推荐在生产环境或脚本中使用
一次插入多条记录
用一个 INSERT 语句插入多行,提升效率:
INSERT INTO 表名 (字段1, 字段2) VALUES (值1a, 值2a), (值1b, 值2b), (值1c, 值2c);
- 每组值用圆括号包裹,之间用英文逗号分隔
- 所有行的字段数量和类型规则保持一致
- 比执行多条单行 INSERT 更快,减少网络和解析开销
从其他表导入数据(INSERT ... SELECT)
适合批量迁移、备份或生成汇总数据:
INSERT INTO 目标表 (字段1, 字段2) SELECT 字段A, 字段B FROM 源表 WHERE 条件;
- SELECT 返回的列数、类型要与 INSERT 的字段匹配
- 支持 JOIN、函数、常量等复杂查询逻辑
- 不会自动去重,如需避免重复可配合
NOT EXISTS或临时表处理










