MySQL Workbench中的外键不起作用?

时间:2016-03-23 10:16:14

标签: mysql database foreign-keys mysql-workbench

我在MySQL Workbench中对数据库进行逆向工程,但它似乎没有导入或识别外键。这意味着我无法得到它来描绘关系。

虽然我试图让它工作,但我正在使用几张表的片段,所以它并不复杂。

以下是我试图开始工作的2个演示表:

    CREATE TABLE users (
    UserID varchar(32) NOT NULL,
    OrgID varchar(6) NOT NULL,  
    RegionID int NULL,
    LocationID int NULL,
    Name nvarchar(60) NULL,
    Crypt varchar(32) NULL,
    Security int NULL,
    Status int NULL,
    PRIMARY KEY ( UserID ),
    CONSTRAINT fk_OrgID_Users FOREIGN KEY (OrgID) REFERENCES Organisations(OrgID)
);


CREATE TABLE Organisations(
    OrgID varchar(6) NOT NULL,
    Name nvarchar(70) NOT NULL,
    Address1 varchar(50) NULL,
    Address2 varchar(50) NULL,
    Address3 varchar(50) NULL,
    Town varchar(20) NULL,
    County varchar(20) NULL,
    PostCode varchar(10) NULL,
    NotificationEmail varchar(500) NOT NULL,
    PRIMARY KEY ( OrgID )   
)

但是在MySQL Workbench中,没有创建任何关系或外键。如果我查看表数据和外键选项卡,那里什么都没有?

我认为我正在正确创建外键,所以它有没有导入它们的原因?

1 个答案:

答案 0 :(得分:2)

在进一步的研究中,我需要为此工作做几件事。

我必须确保从MySQL反向设计的表被定义为InnoDB。

我还必须从create table命令中删除外键约束,并在创建表后创建外键,如下所示:

CREATE TABLE Users (
    UserID varchar(32) NOT NULL,
    OrgID varchar(6) NOT NULL,  
    RegionID int NULL,
    LocationID int NULL,
    Name nvarchar(60) NULL,
    Crypt varchar(32) NULL,
    Security int NULL,
    Status int NULL,
    PRIMARY KEY ( UserID )
) ENGINE=InnoDB;

CREATE TABLE Organisations(
    OrgID varchar(6) NOT NULL,
    Name nvarchar(70) NOT NULL,
    Address1 varchar(50) NULL,
    Address2 varchar(50) NULL,
    Address3 varchar(50) NULL,
    Town varchar(20) NULL,
    County varchar(20) NULL,
    PostCode varchar(10) NULL,
    NotificationEmail varchar(500) NOT NULL,
    PRIMARY KEY ( OrgID )   
) ENGINE=InnoDB;

ALTER TABLE Users ADD CONSTRAINT fk_OrgID_Users FOREIGN KEY (OrgID) REFERENCES Organisations(OrgID);

然后工作正常,关系在MySQL Workbench中可见并连接