我无法在mysql错误150中创建外键。请帮助
问题描述:
我想在我的表中创建一个外键。但是,当我执行我的查询它让我错误150我无法在mysql错误150中创建外键。请帮助
Error Code : 1025
Error on create foreign key of '.\vts\#sql-6ec_1' to '.\vts\tblguardian' (errno: 150)
(0 ms taken)
我的查询是
查询来创建一个外键
alter table `vts`.`tblguardian` add constraint `FK_tblguardian` FOREIGN KEY (`GuardianPickPointId`) REFERENCES `tblpickpoint` (`PickPointId`)
主键表
CREATE TABLE `tblpickpoint` (
`PickPointId` int(4) NOT NULL auto_increment,
`PickPointName` varchar(500) default NULL,
`PickPointLabel` varchar(500) default NULL,
`PickPointLatLong` varchar(100) NOT NULL,
PRIMARY KEY (`PickPointId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
外交密钥表
CREATE TABLE `tblguardian` (
`GuardianId` int(4) NOT NULL auto_increment,
`GuardianName` varchar(500) default NULL,
`GuardianAddress` varchar(500) default NULL,
`GuardianMobilePrimary` varchar(15) NOT NULL,
`GuardianMobileSecondary` varchar(15) default NULL,
`GuardianPickPointId` int(4) default NULL,
PRIMARY KEY (`GuardianId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
答
你的问题是在你的约束列的类型是不同的。他们必须是一样的。
`PickPointId` int(4) NOT NULL auto_increment,
`GuardianPickPointId` varchar(100) default NULL,
欲了解更多信息,请参阅the documentation:
相应列的外键,以便他们可以在没有类型转换比较的参考密钥必须有InnoDB内类似的内部数据类型。整数类型的大小和符号必须相同。字符串类型的长度不需要相同。对于非二进制(字符)字符串列,字符集和归类必须相同。
@Shantanu Gupta:你应该创造一个新的问题,而不是改变你的旧问题。在你的新问题中,如果它提供有用的背景信息,请链接回原来的问题。当您将问题更改为另一个问题时,现有答案不再有意义,因此对于通过Google查找此网站的同一问题的其他人无效。 – 2010-04-05 08:03:10