【问题标题】:What must one put in a SQL statement for an auto generated field?必须在 SQL 语句中为自动生成的字段添加什么?
【发布时间】:2012-04-07 11:10:25
【问题描述】:

我的 MySQL 表中的第一列是自动递增的主键。我正在尝试像这样使用 PHP 添加一个新行。

mysql_query("INSERT INTO users VALUES ('', '$username', '$hashedPassword')");

我应该在'' 或第一个字段中输入什么?它是自动生成的,但我不希望该字段为空。

有趣的是,使该字段为空是可行的,但是如果在某些情况下我没有遇到过这种情况,恐怕会中断。放在那里的标准实体是什么?

另外,您的解决方案是否也适用于默认为当前时间的时间戳字段?

我是 PHP 和 MySQL 的新手。谢谢。

【问题讨论】:

标签: php mysql sql


【解决方案1】:

正如其他人所建议的那样,指定您要向哪些列添加数据。完成此操作后,您可以省略主键列,DBMS 会为您处理。

【讨论】:

    【解决方案2】:

    INSERT INTO users ('username', 'hashedpassword') VALUES ('$username', '$hashedPassword')

    您不需要引用自动生成的 id 字段,因为它将由 MySQL 处理。

    【讨论】:

      【解决方案3】:

      养成这样指定字段的习惯很好

      INSERT INTO users (username,password) VALUES ( '$username', '$hashedPassword')
      

      或者如果你想指定 id 字段也使用 NULL

      INSERT INTO users (id,username,password) VALUES (NULL, '$username', '$hashedPassword')
      

      通过指定字段,您的代码不太可能中断,例如,如果您向表中添加一个额外的字段。

      【讨论】:

        【解决方案4】:

        auto_increment 的目的是不必在那里放任何东西。您必须将其保留为 NULL 或 DEFAULT,或者不要将其作为要插入/更新的 vlue 包含在内。它由 MySQL 内部处理

        【讨论】:

          【解决方案5】:

          如果它是自动增量列,则不要指定任何内容。您还应该明确列出要插入的所有列。试试这个:

          INSERT INTO users (username, password) 
          VALUES ('$username', '$hashedPassword');
          

          【讨论】:

            【解决方案6】:

            您可以使用NULL

            但更好的是明确命名列并省略该列。

            INSERT INTO users (username, hashedPassword)
            VALUES ('$username', '$hashedPassword')
            

            来自MySQL manual

            没有为 AUTO_INCREMENT 列指定值,因此 MySQL 自动分配了序列号。您还可以将 NULL 或 0 显式分配给列以生成序列号。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-10-02
              • 2023-03-04
              • 1970-01-01
              • 2010-11-02
              • 2021-07-01
              • 2019-04-22
              相关资源
              最近更新 更多