2017-01-01 64 views
0
CREATE TABLE hoofdtoonder 
    (
    id    INT NOT NULL, 
    idondersoorten INT FOREIGN KEY REFERENCES `ondersoort`(`id`) NOT NULL, 
) 

//决策表但误差与MySQL数据库有人引用它,请帮助我不明白什么是错与MySQL语法

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

+0

** **什么错误,你得到什么? – ceejayoz

+0

sql错误1064:我说的语法错误 –

+1

'FOREIGN KEY REFERENCES'应该是'NOT NULL'。没有必要在末尾明确指定“NOT NULL”。 –

回答

2

有几件事情错在这里:

  1. 首先,内联约束,你不需要指定foreign key,只是references
  2. not null子句应该在references子句之前。
  3. 在最后一列的规范末尾有一个多余的逗号。

为了把它放在一起:

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

感谢buddy修复它 –

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 

哪儿参考一去?它被无声地丢弃了。这实际上是我对MySQL的一个牛肉,它承认一些有效的约束语法,但忽略它。它甚至不会向您显示警告。它只是定义了表而没有的约束。

在MySQL中,你必须声明一个外键的表级的约束,像这样:

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