我想在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 ;
答案 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
)参考GestionStock
。language
(
idCat
)在更新时不执行任何操作;
像这样使用