【问题标题】:Primary key auto_increment not working on MYSQL [closed]主键 auto_increment 不适用于 MYSQL [关闭]
【发布时间】:2020-09-08 21:58:29
【问题描述】:
CREATE TABLE people (
    id INT NOT NULL AUTO_INCREMENT,
    first_name VARCHAR(50) NOT NULL,
    salary INT NOT NULL,
    PRIMARY KEY (id)
);

我的插入语句

INSERT INTO people
VALUES
('Austin', 65000),
('Josh', 100000),
('Pettea', 55000)
;

【问题讨论】:

  • 无法使用此插入查询重现任何内容,这会引发错误
  • @NicoHaase 您必须收到“列计数与第 1 行的值计数不匹配”错误消息。 fiddle。也许您曾尝试使用其他 DBMS 重现该问题?
  • @Akina 完全正确。所以奇怪的问题是:OP 所说的“不工作”是什么意思?
  • MYSQL 允许您覆盖 auto_increment 列(只要主键不重复)我怀疑因此您必须指定要插入的列而不是 mysql 假设提供的值适用于除 AI 列之外的所有列。

标签: mysql sql primary-key auto-increment


【解决方案1】:

列数量(跳过列表时表结构中的总列数量)必须与值数量强匹配。

所以要么指定列名:

INSERT INTO people (first_name, salary)
VALUES
('Austin', 65000),
('Josh', 100000),
('Pettea', 55000);

或指定每列的值:

INSERT INTO people
VALUES
(NULL, 'Austin', 65000),
(NULL, 'Josh', 100000),
(NULL, 'Pettea', 55000);

在最后的代码中,您可以使用零值或 DEFAULT 关键字代替 NULL。这三个值中的任何一个都会产生新的值。

附言。前一种代码是首选 - 如果结构发生更改,则在任何版本中都不需要。

PPS。我建议将自动增量列数据类型定义为 UNSIGNED - 这会使可能的自动生成值的数量翻倍。

【讨论】:

    【解决方案2】:

    应该是:

    INSERT INTO people(first_name, salary)
    VALUES
    ('Austin', 65000),
    ('Josh', 100000),
    ('Pettea', 55000);
    

    试试看。

    这是一个有效的小提琴:https://www.db-fiddle.com/f/rW6QyPbyEMvZhcskipBpaX/0 点击“运行”。

    编辑: 我想我误读了您的评论:在这种情况下,您需要指定要插入数据的列。现在,您的查询正在尝试将两列数据值插入到三列表中。 INSERT INTO peopleINSERT INTO people(id,first_name,salary) 类似,因此插入两列数据会返回 Column count doesn't match value count at row 1 错误。如果你这样做是可以接受的:

    INSERT INTO people
    VALUES
    (1,'Austin', 65000),
    (2,'Josh', 100000),
    (3,'Pettea', 55000);
    

    但是您将 id 列设置为 AUTO_INCREMENT 是有原因的,因此没有必要手动填充它。

    【讨论】:

    • 所以默认情况下,如果我不指定列,它不会自动填写id?
    • 您不需要指定 id 列,因为它是 auto_increment。它将根据上次运行的数字自行填充。但是,如果您仍想手动填充 id 列,则可以。参考这个例子db-fiddle.com/f/rW6QyPbyEMvZhcskipBpaX/1
    猜你喜欢
    • 2013-12-11
    • 2011-06-15
    • 2020-03-09
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2011-03-06
    • 2018-10-12
    相关资源
    最近更新 更多