Я не могу создать внешний ключ в MySQL Ошибка 150. Пожалуйста, помогите - PullRequest
1 голос
/ 05 апреля 2010

Я пытаюсь создать внешний ключ в моей таблице. Но когда я выполняю свой запрос, он показывает ошибку 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 ]

2 голосов
/ 05 апреля 2010

Ваша проблема в типе столбцов в вашем ограничении. Они должны быть одинаковыми.

`PickPointId` int(4) NOT NULL auto_increment, 

`GuardianPickPointId` varchar(100) default NULL,

Для получения дополнительной информации см. документацию :

Соответствующие столбцы во внешнем ключе и ссылочном ключе должны иметь одинаковые внутренние типы данных внутри InnoDB, чтобы их можно было сравнивать без преобразования типов. Размер и знак целочисленных типов должны быть одинаковыми. Длина типов строк не обязательно должна быть одинаковой. Для недвоичных (символьных) строковых столбцов набор символов и сопоставление должны быть одинаковыми.

0 голосов
/ 05 апреля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...