繁体   English   中英

ENGINE = InnoDB'在SQL的第10行

[英]ENGINE=InnoDB' at line 10 in SQL

我正在尝试使用此sql创建表:

CREATE TABLE angestellte (
 PersonalNr          int(11) NOT NULL AUTO_INCREMENT,
 Vorname             varchar(50) NOT NULL,
 Nachname            varchar(50) NOT NULL,
 Beruf               varchar(50) NOT NULL,
 Gehalt              int(11) NOT NULL,
 arbeitetInAbteilung int(11) NOT NULL,
 PRIMARY KEY (PersonalNr),
 FOREIGN KEY abteilung (AbteilungID)
)
ENGINE=InnoDB;

但是我只得到消息

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')
ENGINE=InnoDB' at line 10

我看上去确实找不到我的错误,但认为这可能是我看不到的明显现象。

假设您有一个表,其中一个字段( arbeitetInAbteilung )引用另一个表中的行(例如arbeiten ),则需要这样定义它:

CREATE TABLE `angestellte` (
    `PersonalNR` INT(11) NOT NULL AUTO_INCREMENT,
    ...other fields...
    `arbeitetInAbteilung` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`PersonalNR`),
    INDEX `FK__arbeiten` (`arbeitetInAbteilung`),
    CONSTRAINT `FK__arbeiten` FOREIGN KEY (`arbeitetInAbteilung`) 
        REFERENCES `arbeiten` (`arbeitID`) 
        ON UPDATE CASCADE
        ON DELETE CASCADE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

这意味着将创建一个索引以索引您指定的字段(arbeitetInAbteilung)。 然后将设置一个约束,以使该索引链接到另一个表中另一个字段的值,可以这样定义:

CREATE TABLE `arbeiten` (
    `arbeitID` INT(11) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(50) NOT NULL,
    PRIMARY KEY (`arbeitID`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

请注意,这两个字段必须绝对相同 如果它们是文本字段,则需要具有相同的排序规则; 它们必须为NULL或NOT NULL; 等等。 最小的差异将产生“外键约束格式错误”错误,并且您需要显示InnoDB的引擎状态并解析其输出以了解原因。

ON UPDATE和ON DELETE定义在更改主表(arbeiten)中的值或删除它时会发生什么。 如果ID 123变为456,则CASCADE表示引用123的所有行现在都将引用456。另一种可能性是阻止该操作(RESTRICT),或将不匹配的行设置为NULL(SET NULL)。

如前所述,您的FK语法完全错误。

FOREIGN KEY abteilung (AbteilungID)

应该

FOREIGN KEY some_column REFERENCES abteilung (AbteilungID)

在这里, some_column应该要指定为引用的键和此列的定义应该正好与列匹配的列被替换AbteilungIDabteilung

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM