我目前正在编写一些用于更新数据库中的值的代码。我有一个包含三个约束的表:主键(复合),外键(非复合)和唯一键(复合)。
我的表格(show create table ItemAttributeMaster
的输出):
CREATE TABLE `ItemAttributeMaster` (
`SKU` int(11) NOT NULL,
`ItemAttributeID` int(11) NOT NULL,
`Color` varchar(45) DEFAULT NULL,
`Size` varchar(45) DEFAULT NULL,
PRIMARY KEY (`SKU`,`ItemAttributeID`),
UNIQUE KEY `ItemAttribute_Unique` (`SKU`,`Color`,`Size`),
CONSTRAINT `ItemAttribute_SKU` FOREIGN KEY (`SKU`) REFERENCES `ItemMaster` (`SKU`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
我有一个触发器(this问题),它使ItemAttributeID自动增加,好像它是一个MyISAM表,因此主键不应该违反
我的代码有可能抛出SQLIntegrityConstraintViolationException。在那个过去,当我只有一个可能的约束违例异常(外键)时,我假设SQLIntegrityConstraintViolationException来自该约束。但是在这个表中,我有两个可能违反的约束(外键和唯一键),我怎么知道SQLIntegrityConstraintViolationException引用了哪些?我可以获得约束类型吗?约束名称?字段名称?我已经搜索过网络和JavaDoc,但找不到这个。