MySQL INSERT INTO语句给出错误代码1062

时间:2018-11-23 13:30:00

标签: mysql mysql-workbench

我有一个F1数据库,我试图将团队负责人的名字(来自Principals表)插入Teams表中,但是由于某种原因它无法正常工作。我不确定我的插入语句是否错误,但是我不知道为什么会这样。代码在下面


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));

这是插入语句。 Principals表已经填充了Principal Name及其对应的团队

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

2 个答案:

答案 0 :(得分:1)

在您的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,与定义冲突并导致错误。

您可能要考虑为上述字段设置默认值或修改INSERT语句以容纳这些字段。

INSERT INTO Teams (Principal, Team_Name, Nation, Seasons)
SELECT 
    -- four columns ...

答案 1 :(得分:0)

您的插入语句尝试将空值分配给具有“非空”属性的列。检查这些列'not null'-> false或分配默认值或在您的插入语句中定义值。希望有帮助