在<tablename>(检查数据类型)</tablename>上创建外键时出错

时间:2013-05-23 12:02:38

标签: mysql

我想在mysql中创建表,te第一个表称为Catégorie,第二个表称为Article:

(文章)0 .. * ------------- 1(Catégorie)

但是我收到了这个错误:

  

在idCat上创建外键时出错(检查数据类型)

这是我试过的代码:

CREATE TABLE IF NOT EXISTS `Catégorie` (
  `idCat` int(11) NOT NULL,
  `libCat` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`idCat`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `Article` (
  `codeArt` int(11) NOT NULL,
  `desgArt` int(11) DEFAULT NULL,
  `etatArt` varchar(50) DEFAULT NULL,
  `qteArt` int(11) DEFAULT '1',
  `qteseulmin` varchar(50) DEFAULT NULL,
  `idCat` int(11) NOT NULL,
  PRIMARY KEY (`codeArt`),
  KEY `idCat` (`idCat`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


ALTER TABLE  `Article` ADD FOREIGN KEY (  `idCat` ) REFERENCES  `GestionStock`.`Catégorie` (
`idCat`
) ON DELETE SET NULL ON UPDATE CASCADE ;

4 个答案:

答案 0 :(得分:16)

您将列Article.idCat声明为 NOT NULL ,然后您尝试使用ON DELETE SET NULL 操作创建外键。

更改列或外键定义。

答案 1 :(得分:5)

此错误的原因之一是数据类型不兼容。

例如,在我的情况下,问题是虽然实际的id是'UNSIGNED',但引用它的外键未声明为unsigned。因此后者的范围更高。

请注意,反之亦然。

答案 2 :(得分:2)

在你的表定义中,你已经说过idCat永远不会是NULL。

但是,您的密钥定义试图说明在DELETE操作中应将idCat设置为NULL。

这些要求不兼容,因此错误。

答案 3 :(得分:0)

ALTER TABLE Article添加外键(idCat)参考GestionStocklanguageidCat )在更新时不执行任何操作;

像这样使用