我不知道mysql语法有什么问题

时间:2017-01-01 20:04:52

标签: mysql sql database

    CREATE TABLE hoofdtoonder
  (
     id             INT NOT NULL,
     idondersoorten INT FOREIGN KEY REFERENCES `ondersoort`(`id`) NOT NULL,
  )

//制作表但错误是在mysql数据库上引用它有人请帮忙

它表示FOREIGN KEY REFERENCES ondersoort(id) NOT NULL处的错误。但我不知道语法有什么问题。

2 个答案:

答案 0 :(得分:2)

这里有几个问题:

  1. 首先,对于内联约束,您无需指定foreign key,只需指定references
  2. not null子句应该在references子句之前。
  3. 在最后一栏的规范末尾有一个冗余逗号。
  4. 把它们放在一起:

    CREATE TABLE hoofdtoonder (
        id             INT NOT NULL,
        idondersoorten INT NOT NULL REFERENCES `ondersoort`(`id`)     
    );
    

答案 1 :(得分:0)

MySQL不支持内联外键引用。

确实,SQL语言允许像@Mureinik建议的语法:

idondersoorten INT NOT NULL REFERENCES `ondersoort`(`id`) 

但是你会发现MySQL会解析它并忽略它。 InnoDB不支持内联外键语法。如果您现在运行SHOW CREATE TABLE hoofdtoonder,它会显示:

CREATE TABLE `hoofdtoonder` (
  `id` int(11) NOT NULL,
  `idondersoorten` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

REFERENCES去了哪里?它被默默地丢弃了。这实际上是我对MySQL的一种优势,它识别一些有效的约束语法,但忽略它。它甚至没有向你显示警告。它只是定义表而没有约束。

在MySQL中,您必须将外键声明为表级约束,如下所示:

CREATE TABLE hoofdtoonder (
    id             INT NOT NULL,
    idondersoorten INT NOT NULL,
    FOREIGN KEY (idondersoorten) REFERENCES `ondersoort`(`id`)     
);