【问题标题】:auto_increment property not working as expectedauto_increment 属性未按预期工作
【发布时间】:2021-09-14 16:17:20
【问题描述】:

我已经像这样create table users (id not null auto_increment primary key, first_name varchar(256) not null, last_name varchar(256) not null); 初始化了一个数据库users 但是,我可以只执行insert into users values (2,'James','Bond'); 并且不会引发错误。我想创建一个表,以便主键自动递增,并且可以简单地添加如下条目:insert into users values ("firstname","lastname"); 这甚至可能吗?谢谢!!

【问题讨论】:

    标签: mysql auto-increment


    【解决方案1】:

    当您使用语法 insert into users values ('firstname','lastname'); 时,即您没有指定列列表,这意味着您的 VALUES 子句将包含所有列的值。这与使用 auto_increment 无关,它适用于任何表。

    您可以通过指定列来解决此问题:

    insert into users (firstname, lastname) values ('firstname','lastname');
    

    通过从列列表中省略 id,它也应该从 VALUES 子句中省略。

    MySQL 支持的另一种形式的 INSERT 语法(尽管它是非标准的)可能更清楚。它还允许您省略不想在 INSERT 语句中设置的列。

    insert into users SET firstname='firstname', lastname='lastname;
    

    如果您确实隐式或显式包含id 列,则可以使用NULLDEFAULT 或在sql 模式允许的情况下使用0 来触发自动递增行为。

    如果您为 id 指定任何其他值,它会覆盖自动增量。

    所有内容都记录在这里:https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html 以及该页面链接的相关页面。

    【讨论】:

      【解决方案2】:

      您可以命名要插入的列。

      但是如果你有更多的t列,你必须定义DEFAULT值,以便Mysql知道如何填充没有插入的值

      INSERT INTO users (first_name ,last_name ) VALUEs("firstname","lastname");
      

      【讨论】:

        【解决方案3】:

        列自动递增的事实并不意味着您可以在插入语句中忽略它。但是,您可以避免为其分配值并让 auto_increment 属性通过使用 default 关键字来处理它:

        insert into users values (default, 'firstname', 'lastname');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-05
          • 2011-08-28
          • 1970-01-01
          • 2021-09-21
          相关资源
          最近更新 更多