簡體   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