为什么在列上设置键约束会从中删除“NOT NULL”(MySQL)?

时间:2015-02-07 13:33:39

标签: 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_idNOT NULL中写NULLCREATE TABLE设置为PRIMARY KEY

是否与FOREIGN KEYparent_id有关?

我猜pigeon是一种可识别的关系(它指的是更为一般的生物类型,例如从birdNULL,以及它{{1}}顶级生物种类。)

1 个答案:

答案 0 :(得分:0)

  

PRIMARY KEY是一个唯一索引,其中所有键列必须定义为NOT NULL。如果它们没有显式声明为NOT NULL,那么MySQL会隐式声明它(并且默默地)。 MySQL Manual