【问题标题】:Insert values without mentioning the column name插入值而不提及列名
【发布时间】:2014-12-15 10:52:43
【问题描述】:

所以我尝试插入值而不在代码中提及列名..

经过一番搜索,我发现可以通过 here 中提到的将值传递为 null。但是当我这样做时,它抛出了一些错误。

我用过的代码

CREATE TABLE Persons
(
    ID int  NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (ID)
);

insert into Persons values (NULL,1);

那么如何在不提及列名的情况下添加值?

提前感谢

【问题讨论】:

  • 列出要插入数据的所有列。你有问题吗?这是一个最佳实践。
  • @GordonLinoff 我只是想知道它是如何插入而不提及..你能给我一个显示示例的 sql fiddle
  • @frgdgdfgdfgdgdgd 你必须插入具有 NULL 值的记录,检查this

标签: php mysql


【解决方案1】:

确保在插入中输入所有列值。

INSERT INTO Persons VALUES (NULL, 'Last name', 'First name', 'Address', 'City');

抱歉错过了主键的NULL值

【讨论】:

  • VALUES (...你确定吗?
  • -1 我不是。我想我知道我在说什么。
  • 那么你的问题是什么?
  • 它没有帮助..它抛出错误..如果你提供小提琴示例会很有帮助
  • 如果有人想知道我为什么这么说,是由于stackoverflow.com/revisions/26465998/1给出的原始答案,请参阅修订。只是点缀i's 和点缀t's,就这样。
【解决方案2】:

您必须指定列,或在每一列中插入值。

如果您有 6 列,则不能在不命名 2 列的情况下传递 2 个值,等等。

【讨论】:

    【解决方案3】:

    如果您不指定 哪些 列应该获取这些值,那么您希望数据库如何知道?如果您至少为 all 列提供值,那么查询引擎可能可以通过列的顺序来推断,具体取决于数据库。 (根据this question 及其答案,MySQL 似乎支持。)

    但即便如此,这也不是很好的做法。它在模式和代码之间创建了各种耦合。通过明确指定列,您可以稍后在同一个表中添加/更改不相关的列,而不会影响该查询。但是,如果您依赖架构中列的顺序,那么对架构的任何更改都将需要更改每个查询,即使是逻辑上不受影响的查询。

    明确指定列更简单、更稳定、更清楚地表达意图。

    【讨论】:

    • ..是的,我知道。但我只想知道如何实现这里解释的方法stackoverflow.com/questions/1871331/…
    • @frgdgdfgdfgdgdgd:这个问题的第一个答案似乎提供了一个解释。对AUTO_INCREMENT 列使用NULL,并为其余列指定值。 (当然,其中一些也可能是NULL。)
    • 我试过了,但它没有帮助我..你能提供一个 sql fiddle 示例。
    • @frgdgdfgdfgdgdgd:你尝试了什么,它是如何失败的?使用这些新信息更新问题,以便人们可以提供帮助。
    【解决方案4】:

    如果这只是出于实验目的,可以:

    INSERT INTO Persons VALUES (NULL, 'Lastname', 'Firstname', 'Address test', 'city of angels');
    

    但我强烈建议您不要养成这样做的习惯。始终添加列,正如 David 的 answer 所言。

    INSERT INTO Persons (LastName, FirstName, Address, City) VALUES ('Last', 'First', 'Add', 'City');
    

    Fiddle

    【讨论】:

    • @frgdgdfgdfgdgdgd 你之前说过,但没有定义错误是什么。
    • 终于找到一个有意义的答案 ;) 好像stackoverflow.com/a/26465998 知道一些我不知道的事情。
    • @Fred-ii- 我猜还在摆弄。令人惊讶的是,我不知道它是如何获得这些选票的
    • 终于看到了他/她的方式的错误;)原始答案stackoverflow.com/revisions/26465998/1包含反引号而不是引号。
    • 我只是想直截了当。 ;) 不多也不少。
    【解决方案5】:

    我认为您可以,但您需要提及出现在表记录结构中的值。如果你错过了,你会得到错误的记录或查询会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      相关资源
      最近更新 更多