如何在不指定列名的情况下使用 AUTO_INCREMENT 列向数据库插入新行?
Posted
技术标签:
【中文标题】如何在不指定列名的情况下使用 AUTO_INCREMENT 列向数据库插入新行?【英文标题】:How to insert new row to database with AUTO_INCREMENT column without specifying column names? 【发布时间】:2011-03-30 10:43:49 【问题描述】:我有一个包含以下列的表格:
id
- INT UNSIGNED AUTO_INCREMENT
name
- VARCHAR(20)
group
- VARCHAR(20)
我知道我可以像这样添加一行:
INSERT INTO table_name (name, group) VALUES ('my name', 'my group')
我想知道是否有一种方法可以添加一行不指定列名,比如没有 AUTO_INCREMENT 列时?
【问题讨论】:
【参考方案1】:对于某些数据库,您只需将NULL
显式插入auto_increment
列即可:
INSERT INTO table_name VALUES (NULL, 'my name', 'my group')
【讨论】:
但是,这是一种非常糟糕的做法,不应该这样做。如果列以某种方式重新排列,则应始终使用列名执行插入语句,否则会将数据放入错误的列中。如果添加了另一列,则插入将失败。我不能足够强调这是多么糟糕的做法。由于一点点懒惰,您可能会破坏数据的完整性。老实说,由于您可以从对象浏览器中拖放列名,因此我们谈论的是冒着您的数据风险,因为您懒得在一项任务上多花一分钟时间。 如果你使用python
,则通过None
【参考方案2】:
更好的是,使用DEFAULT 而不是NULL。您要存储默认值,而不是可能触发默认值的 NULL。
但是你最好给所有的列命名,使用一条 SQL 就可以创建你需要的所有 INSERT、UPDATE 和 DELETE。只需检查information_schema 并构建您需要的查询。无需全部手动完成,SQL 可以帮助您。
【讨论】:
这对 Postgres 很有帮助。使用 NULL 会导致ERROR: null value in column "id" violates not-null constraint
【参考方案3】:
只需添加列名,是的,您可以使用 Null 代替,但在任何插入中都不使用列名是一个非常糟糕的主意。
【讨论】:
投反对票,因为这根本不能回答问题,而且对于非生产/非关键环境中的一次性查询,不使用列名就可以了。以上是关于如何在不指定列名的情况下使用 AUTO_INCREMENT 列向数据库插入新行?的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery - 如何在不使用列名作为值的情况下导入 CSV?