SQL外键不自动递增

SQL外键不自动递增,sql,auto-increment,javadb,Sql,Auto Increment,Javadb,当我注释掉每个外键调用时,代码运行,正确创建表并用递增的id填充它们,但当我在其中调用外键时,它只是中断,id保持为null CREATE TABLE CustomerDetails ( CustomerID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) CONSTRAINT CustomerDetails_PK PRIMARY KEY, CustomerFirstNam

当我注释掉每个外键调用时,代码运行,正确创建表并用递增的id填充它们,但当我在其中调用外键时,它只是中断,id保持为null

 CREATE TABLE CustomerDetails
(
    CustomerID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
    CONSTRAINT CustomerDetails_PK PRIMARY KEY,
    CustomerFirstName VARCHAR(15) NOT NULL,
    CustomerSurname VARCHAR(15) NOT NULL,
    ContactNumber VARCHAR(13) NOT NULL
);
INSERT INTO CustomerDetails(CustomerFirstName, CustomerSurname, ContactNumber) VALUES ('First', 'Last', '09998877665');
CREATE TABLE CinemaList
(
    CinemaID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
    CONSTRAINT CinemaList_PK PRIMARY KEY,
    CinemaName VARCHAR(10)
);
INSERT INTO CinemaList(CinemaName) VALUES ('England');
INSERT INTO CinemaList(CinemaName) VALUES ('Wales');
INSERT INTO CinemaList(CinemaName) VALUES ('Ireland');
CREATE TABLE FilmDetails
(
    FilmID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
    CONSTRAINT FilmDetails_PK PRIMARY KEY,

    FilmName VARCHAR(25),
    FilmInfo VARCHAR(250),
    CinemaList_CinemaID INT NOT NULL
);
ALTER TABLE FilmDetails ADD FOREIGN KEY (CinemaList_CinemaID) REFERENCES CinemaList(CinemaID);
INSERT INTO FilmDetails(FilmName, FilmInfo) VALUES ('Film1', 'Film1 Bio');
INSERT INTO FilmDetails(FilmName, FilmInfo) VALUES ('Film2', 'Film2 Bio');
CREATE TABLE FilmTimes
(
    TimeID INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
    CONSTRAINT FilmTimes_PK PRIMARY KEY,
    FilmTime VARCHAR(5),
    FilmDetails_FilmID INT NOT NULL
);
ALTER TABLE FilmTimes ADD FOREIGN KEY (FilmDetails_FilmID) REFERENCES FilmDetails(FilmID);
INSERT INTO FilmTimes(FilmTime) VALUES ('11:00');
INSERT INTO FilmTimes(FilmTime) VALUES ('17:00');
INSERT INTO FilmTimes(FilmTime) VALUES ('21:00');
CREATE TABLE BookingDetails
(
BookingID INT NOT NULL
GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
CONSTRAINT BookingDetails_PK PRIMARY KEY,
FilmTimes_TimeID INT NOT NULL,
CustomerDetails_CustomerID INT NOT NULL,
BookingDate DATE NOT NULL

);
ALTER TABLE BookingDetails ADD FOREIGN KEY (CustomerDetails_CustomerID) REFERENCES CustomerDetails(CustomerID);
ALTER TABLE BookingDetails ADD FOREIGN KEY (FilmTimes_TimeID) REFERENCES FilmTimes(TimeID);
INSERT INTO BookingDetails(BookingDate) VALUES ('2016-01-17');

数据库不知道要为外键插入哪些值。您必须显式地插入它们。例如,对于电影时间,您需要执行以下操作:

插入电影时间(电影时间,电影细节\u电影ID)从电影细节中选择“11:00”,电影ID

这将在FilmTimes中插入两行:一行包含生成的时间ID“11:00”,一行包含生成的ID“Film1”,另一行包含不同生成的时间ID“11:00”,一行包含生成的ID“Film2”。例如{1,“11:00”,1}和{2,“11:00”,2}


插入时会生成主键,但无法生成外键-外键指的是已存在于另一个表中的内容

数据库不知道要为外键插入什么值。您必须显式地插入它们。例如,对于电影时间,您需要执行以下操作:

插入电影时间(电影时间,电影细节\u电影ID)从电影细节中选择“11:00”,电影ID

这将在FilmTimes中插入两行:一行包含生成的时间ID“11:00”,一行包含生成的ID“Film1”,另一行包含不同生成的时间ID“11:00”,一行包含生成的ID“Film2”。例如{1,“11:00”,1}和{2,“11:00”,2}


插入时会生成主键,但无法生成外键-外键指的是已存在于另一个表中的内容

看起来你需要重新思考电影时间和电影细节之间的关系。我看到您在FilmDetails中插入值时没有为外键提供值,外键具有
NOT NULL
约束(因此您必须为其提供非NULL值)。我正在尝试从FilmTimes中调用FilmTimeID作为FilmDetails中的外键。我们需要时间,而不是空的@aro_techForeign key约束不会导致生成或插入任何值。初始声明中是否未生成这些值?例如-
BookID INT NOT NULL始终生成为标识(从1开始,增量为1)约束BookingDetails\u PK主键看起来您需要重新考虑FilmTimes和FilmDetails之间的关系。我看到您在FilmDetails中插入值时没有为外键提供值,外键具有
NOT NULL
约束(因此您必须为其提供非NULL值)。我正在尝试从FilmTimes中调用FilmTimeID作为FilmDetails中的外键。我们需要时间,而不是空的@aro_techForeign key约束不会导致生成或插入任何值。初始声明中是否未生成这些值?例如-
BookID INT NOT NULL始终作为标识生成(从1开始,递增1)约束BookingDetails\u PK主键