0

我的数据库使用以下 SQL,它是使用 apache cayenne 组成的。

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE IF EXISTS Element CASCADE;

SET FOREIGN_KEY_CHECKS=1;

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE IF EXISTS Project CASCADE;

SET FOREIGN_KEY_CHECKS=1;

CREATE TABLE Project (
    ID BIGINT NOT NULL,
    Name VARCHAR(100) NOT NULL,
    PRIMARY KEY (ID)
) ENGINE=InnoDB;

CREATE TABLE Element (
    Alt VARCHAR(500) NULL,
    BackgroundColour VARCHAR(6) NULL,
    Colour VARCHAR(6) NULL,
    DisplayOrder INT NULL,
    FontFamily VARCHAR(30) NULL,
    FontSize INT NULL,
    Height INT NULL,
    ID VARCHAR(30) NOT NULL,
    Name VARCHAR(30) NULL,
    PKID BIGINT NOT NULL,
    ParentPKID BIGINT NULL,
    ProjectID BIGINT NOT NULL,
    RelativeX INT NULL,
    RelativeY INT NULL,
    Src VARCHAR(500) NULL,
    Type VARCHAR(10) NOT NULL,
    Value VARCHAR(10000) NULL,
    Width INT NULL,
    PRIMARY KEY (PKID)
) ENGINE=InnoDB;

ALTER TABLE Element ADD FOREIGN KEY (ParentPKID) REFERENCES Element (PKID);

ALTER TABLE Element ADD FOREIGN KEY (ProjectID) REFERENCES Project (ID);

DROP TABLE IF EXISTS AUTO_PK_SUPPORT;

CREATE TABLE AUTO_PK_SUPPORT (
    TABLE_NAME CHAR(100) NOT NULL,
    NEXT_ID BIGINT NOT NULL,
    UNIQUE (TABLE_NAME)
);

DELETE FROM AUTO_PK_SUPPORT WHERE TABLE_NAME IN ('Element', 'Project');

INSERT INTO AUTO_PK_SUPPORT (TABLE_NAME, NEXT_ID) VALUES ('Element', 200);

INSERT INTO AUTO_PK_SUPPORT (TABLE_NAME, NEXT_ID) VALUES ('Project', 200);

但是,当元素表中存在元素并且我尝试删除项目时,我收到:

SQL query:

DELETE FROM  `bluetwine`.`project` WHERE  `project`.`ID` =240

MySQL said: Documentation

#1451 - Cannot delete or update a parent row: a foreign key constraint fails (`bluetwine`.`element`, CONSTRAINT `element_ibfk_2` FOREIGN KEY (`ProjectID`) REFERENCES `project` (`ID`)) 

我的外键有什么问题?

显示“项目”中的列;

项目 http://nottsbsa.org/Images/SO5.png

显示“元素”中的列;

项目 http://nottsbsa.org/Images/SO4.png

我表中当前的数据是:

项目 http://nottsbsa.org/Images/SO1.png

元素 http://nottsbsa.org/Images/SO2.png

数据库的目的是有一个元素表引用自己,所以一个项目可以有很多元素,一个元素可以有一个父元素或多个子元素。请注意,这是使用 Apache Cayenne 构建的,因此欢迎任何 cayenne 答案!

非常感谢

4

0 回答 0