【问题标题】:How to insert new row to database with AUTO_INCREMENT column without specifying column names?如何在不指定列名的情况下使用 AUTO_INCREMENT 列向数据库插入新行?
【发布时间】: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 列时?

【问题讨论】:

    标签: sql mysql insert 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 代替,但在任何插入中都不使用列名是一个非常糟糕的主意。

    【讨论】:

    • 投反对票,因为这根本不能回答问题,而且对于非生产/非关键环境中的一次性查询,不使用列名就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    相关资源
    最近更新 更多