我有一个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);
答案 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或分配默认值或在您的插入语句中定义值。希望有帮助