1

我想在mysql中创建表,第一个表称为Categorie,第二个称为Article:

(文章) 0..* ------------- 1 (类别)

但我收到此错误:

在 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

4 回答 4

16

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

更改列或外键定义。

于 2013-05-23T12:07:02.333 回答
5

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

例如,在我的例子中,问题是虽然实际 id 是“未签名”,但引用它的外键并未声明为未签名。因此后者的范围更大。

请注意,相反的情况也可以。

于 2014-05-30T05:36:28.517 回答
2

在您的表定义中,您已经说过 idCat 永远不能为 NULL。

但是,您的键定义试图说明 idCat 应该在 DELETE 操作上设置为 NULL。

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

于 2013-05-23T12:06:58.467 回答
-1

ALTER TABLE Article添加外键 ( idCat) 引用 GestionStocklanguage( idCat ) ON DELETE NO ACTION ON UPDATE NO ACTION ON DELETE NO ACTION ON UPDATE NO ACTION

像这样使用

于 2014-08-07T12:55:55.010 回答