2015-02-07 50 views
0

我的代碼創建一個表:爲什麼在列上設置鍵約束會從中刪除「NOT NULL」(MySQL)?

DROP TABLE IF EXISTS `database`.`creatures_kinds` ; 

CREATE TABLE IF NOT EXISTS `database`.`creatures_kinds` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    `parent_id` INT UNSIGNED NULL, 
    `name_en` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`id`, `parent_id`), 
    INDEX `parent_id` (`parent_id` ASC), 
    CONSTRAINT `parent` 
    FOREIGN KEY (`parent_id`) 
    REFERENCES `database`.`creatures_kinds` (`id`) 
    ON DELETE RESTRICT 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

什麼讓我感到吃驚的是,新創建的表看起來像這樣: enter image description here

爲什麼parent_id設置爲NOT NULL當我在寫NULLCREATE TABLE

它與PRIMARY KEYFOREIGN KEY有什麼關係?

我想這parent_id是可識別的關係(它指向更廣泛的生物種類,例如從pigeonbird,這是NULL爲頂級生物種)。

回答

0

A PRIMARY KEY是一個唯一索引,其中所有關鍵字列必須定義爲NOT NULL。如果它們沒有被明確聲明爲NOT NULL,MySQL會隱式(並且默默)聲明它們。 MySQL Manual