[英]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.