我无法在mysql Error 150中创建外键。请帮忙

时间:2010-04-05 07:12:07

标签: sql database 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    

2 个答案:

答案 0 :(得分:2)

您的问题是约束中的列类型不同。它们必须是一样的。

`PickPointId` int(4) NOT NULL auto_increment, 

`GuardianPickPointId` varchar(100) default NULL,

有关详细信息,请参阅the documentation

  

外键和引用键中的相应列必须在InnoDB内部具有类似的内部数据类型,以便可以在不进行类型转换的情况下对它们进行比较。整数类型的大小和符号必须相同。字符串类型的长度不必相同。对于非二进制(字符)字符串列,字符集和排序规则必须相同。

答案 1 :(得分:0)