SQL插入数据表时如何跳过指定列无需手动列出其余所有列?
跳过指定列插入数据的简化SQL方案
首先确认前提:你要跳过的ID列必须满足以下任意一个条件,否则省略插入会触发报错:
- 配置了自增属性(如MySQL的
AUTO_INCREMENT、PostgreSQL的serial类型) - 已设置默认值
- 列属性允许为
NULL
方案1:全数据库通用的高效列名生成方式
不需要手动敲所有列,直接查询对应数据库的系统表,过滤掉要跳过的ID列,一键生成需要插入的列列表:
- MySQL执行语句:
SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '你的数据库名' AND TABLE_NAME = '你的目标表名' AND COLUMN_NAME != 'ID';
- PostgreSQL执行语句:
SELECT STRING_AGG(COLUMN_NAME, ',') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '你的schema名' AND TABLE_NAME = '你的目标表名' AND COLUMN_NAME != 'ID';
把查询得到的列名结果直接复制到INSERT语句的列名括号里即可,列多的时候能节省大量手动输入时间,且不会出现列顺序错配的问题,生产环境优先推荐这个方案。
方案2:省略列名的快速写法(仅适合临时操作,不推荐生产环境用)
如果是自己本地临时插数据,不需要长期维护这个SQL,可以直接给ID列传NULL或者DEFAULT占位,不用写列名:
注意:该写法要求
VALUES中的值顺序必须和表定义的列顺序完全一致,表新增/删除列后这个写法会直接报错或者插入脏数据。
- MySQL示例(ID为自增列):
INSERT INTO TABLE_NAME VALUES (NULL, '张三', 25, '男', 8000);
- PostgreSQL示例(ID为自增列):
INSERT INTO TABLE_NAME VALUES (DEFAULT, '张三', 25, '男', 8000);
内容的提问来源于stack exchange,提问作者Don Fleym
相关产品推荐
相关产品推荐

