Что означает MySQL как «Количество столбцов не соответствует значению в строке 1» - PullRequest
0 голосов
/ 23 апреля 2020

Это сообщение, которое я получаю

ER_WRONG_VALUE_COUNT_ON_ROW: Количество столбцов не соответствует значению в строке 1

Это весь мой код. Где моя ошибка?

DROP TABLE student;

CREATE TABLE employee (
  emp_id INT PRIMARY KEY,
  first-name VARCHAR(40),
  birth_day DATE,
  sex VARCHAR(1),
  SALARY INT,
  super_id INT,
  branch_id INT
);

CREATE TABLE branch (
  branch_id INT PRIMARY KEY,
  branch_name VARCHAR(40),
  mgr_id INT,
  mgr_start_date DATE,
  FOREIGN KEY(mgr_id) REFERENCES employee(emp_id) ON DELETE SET NULL
);

CREATE TABLE works_with (
  emp_id INT,
  client_id INT,
  total_sales INT,
  PRIMARY KEY(emp_id, client_id),
  FOREIGN KEY(emp_id) REFERENCES employee(emp_id) ON DELETE CASCADE,
  FOREIGN KEY(client_id) REFERENCES client(client_id) ON DELETE CASCADE
);

-- Corporate
INSERT INTO employee VALUES(100, 'David', 'Wallace', '1967-11-17', 'M', 250000, NULL, NULL);

INSERT INTO branch VALUES(1, 'Corporate', 100, '2006-02-09');

UPDATE employee
SET branch_id = 1
WHERE employee_id = 100;

INSERT INTO employee VALUES(101, 'Jan', 'Levinson', '1961-05-11', 'F', 110000, 100, 1);

1 Ответ

1 голос
/ 23 апреля 2020

Ваша таблица employee имеет 7 столбцов, но вы даете 8 значений для вставки, которая генерирует полученное сообщение об ошибке.

Хорошей привычкой является перечисление столбцов для insert в заявление. Это значительно облегчает обнаружение ошибок такого типа, поскольку вам не нужно оглядываться назад на определение таблицы (это также предотвращает сбой запроса, если вы когда-нибудь добавите новые столбцы в таблицу в будущем - или удалите существующие столбцы).

INSERT INTO employee(emp_id, first_name, birth_day, sex, salary, super_id, branch_id)
VALUES(100, 'David', 'Wallace', '1967-11-17', 'M', 250000, NULL);

Примечание: не заключенный в кавычки идентификатор first-name, который можно увидеть в операторе create table для employee, недопустим - поскольку он содержит значение da sh (-). Я предполагаю, что это опечатка, а вместо этого вы имели в виду подчеркивание (first_name).

...