Оператор MySQL INSERT INTO с кодом ошибки 1062 - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть база данных F1, и я пытаюсь вставить имя руководителя группы (из таблицы Principals) в таблицу команд, но по какой-то причине это не сработает.Я не уверен, что моя вставка в утверждение неверна, но я не понимаю, почему это так.Код ниже


CREATE TABLE Teams (
Team_Name VARCHAR(30) NOT NULL, 
Driver_1 INT NULL, 
Driver_2 INT NULL, 
Nation VARCHAR(30) NOT NULL, 
Seasons INT NOT NULL, 
No_Titles INT NOT NULL DEFAULT 0, 
Principal VARCHAR(30) DEFAULT NULL, 
PRIMARY KEY (Team_Name));

CREATE TABLE Principals (
Principal_No INT NOT NULL, 
Principal_Name VARCHAR(30) UNIQUE NOT NULL, 
Team VARCHAR(30) NULL, 
Age INT NOT NULL, 
Nationality VARCHAR(30) NOT NULL, 
Seasons INT NOT NULL DEFAULT 0, 
PRIMARY KEY (Principal_No), 
FOREIGN KEY (Team) REFERENCES Teams(Team_Name));

Вот инструкция вставки.Таблица Принципалов уже заполнена именами главных команд и соответствующими командами

INSERT INTO Teams (Principal) 
SELECT Principal_Name 
FROM Principals 
WHERE Team IN(
    SELECT Team_Name 
    FROM Teams);

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

В вашем операторе INSERT

INSERT INTO Teams (Principal) 
--                 ^

вы только вставляете значение для поля Principal в таблицу Teams.Но в таблице Teams есть и другие поля ... не вставляя в них значения, по умолчанию они будут равны NULL.Это приведет к противоречию в аргументах.В вашей таблице Teams:

Team_Name VARCHAR(30) NOT NULL
Nation VARCHAR(30) NOT NULL
Seasons INT NOT NULL

эти поля по определению не могут быть NULL.Но поскольку в оператор INSERT не вставляются никакие значения, по умолчанию они равны NULL, что противоречит определению и вызывает ошибку.

Возможно, вы захотите установить значения по умолчанию для указанных выше полей или * 1014.* изменив оператор INSERT, чтобы вместить эти поля.

INSERT INTO Teams (Principal, Team_Name, Nation, Seasons)
SELECT 
    -- four columns ...
0 голосов
/ 23 ноября 2018

Ваш оператор вставки пытается присвоить нулевые значения столбцам, которые имеют свойство "не нулевое".Проверьте эти столбцы 'not null' -> false или назначьте значение по умолчанию или определите значения в вашем операторе вставки.Я надеюсь, что эта помощь

...