[英]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
应该要指定为引用的键和此列的定义应该正好与列匹配的列被替换AbteilungID
表abteilung
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.