mysql如何将查询数据插入已存在表_使用insert into select语法

张开发
2026/4/16 22:49:50 15 分钟阅读

分享文章

mysql如何将查询数据插入已存在表_使用insert into select语法
最常用写法是INSERT INTO target_table SELECT...FROM source_table需确保字段数量、顺序、类型兼容显式指定目标列名、避免SELECT *、注意NOT NULL约束、数值类型转换、主键冲突处理如INSERT IGNORE或ON DUPLICATE KEY UPDATE、分批插入防OOM、字符集与时区对齐。INSERT INTO SELECT 语法怎么写才不报错直接用 INSERT INTO target_table SELECT ... FROM source_table 是最常用方式但必须保证字段数量、顺序、类型基本兼容。MySQL 不会自动转换类型或补默认值字段数对不上就立刻报 Column count doesnt match value count。实操建议显式写出目标列名别偷懒用 INSERT INTO t1 SELECT * FROM t2 —— 表结构稍有变动就挂SELECT 的字段顺序要和 INSERT 指定的列顺序严格一致不是按名字匹配如果目标表有 NOT NULL 字段且没在 SELECT 中提供值又没设默认值会报 Field xxx doesnt have a default value数值型字段插入字符串如 abc可能被转成 0 或报错取决于 SQL mode比如开启 STRICT_TRANS_TABLES 就直接拒绝目标表有主键或唯一索引时怎么避免重复插入原生 INSERT INTO ... SELECT 遇到主键/唯一冲突就直接报错退出不会跳过。想忽略冲突继续插得加控制逻辑。实操建议用 INSERT IGNORE INTO ... SELECT冲突行静默跳过其余正常插入注意它也会忽略其他错误如类型转换失败不够精准用 INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE idid空更新只跳过冲突不掩盖其他错误如果想更新某些字段把 idid 换成 colVALUES(col)别依赖 REPLACE INTO它本质是 DELETE INSERT会触发删除动作影响外键、自增 ID、触发器多数场景不合适大表导数据卡住或 OOM 怎么办一次性 SELECT 几百万行再 INSERT容易拖慢源表查询、撑爆连接内存、锁表太久。MySQL 默认事务里执行整个语句没分批概念。 幻导航网 发现优质实用网站,开启网络探索之旅

更多文章