У меня есть две таблицы. On - это таблица, которая содержит IP-диапазоны и соответствующие им страны (таблица IPGEO). Другая - это таблица, которая просто отслеживает последнюю страну, из которой был получен доступ к сайту для каждого пользователя. Идея состоит в том, что, если пользователь неожиданно получает доступ к сайту из другой страны, я уведомляю пользователя об этом по электронной почте.
Теперь для фактических таблиц. У меня есть эти два:
Таблица IPGeo, содержащая диапазоны IP-адресов
CREATE TABLE IF NOT EXISTS `politiker_lu`.`IPGeo` (
`IPFrom` INT(11) NOT NULL ,
`IPTo` INT(11) NOT NULL ,
`code2` VARCHAR(2) NOT NULL ,
`code3` VARCHAR(3) NOT NULL ,
`Country` VARCHAR(45) NOT NULL ,
INDEX `index1` (`IPFrom` ASC) ,
INDEX `index2` (`IPTo` ASC) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
Затем есть таблица user_geo, которая отслеживает последнюю страну, из которой пользователь зашел на сайт.
CREATE TABLE IF NOT EXISTS `politiker_lu`.`user_geo` (
`fi_user` INT(10) UNSIGNED NOT NULL ,
`fi_country` VARCHAR(3) NOT NULL ,
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
PRIMARY KEY (`fi_user`) ,
INDEX `fk_user_geo_1` (`fi_user` ASC) ,
CONSTRAINT `fk_user_geo_1`
FOREIGN KEY (`fi_user` )
REFERENCES `politiker_lu`.`user` (`id_user` )
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
Это таблицы в том виде, в котором они существуют. Теперь я хочу сослаться на эти две таблицы следующим образом:
ALTER TABLE `politiker_lu`.`user_geo`
ADD CONSTRAINT `fk_user_geo_IPGeo1`
FOREIGN KEY (`fi_country` )
REFERENCES `politiker_lu`.`IPGeo` (`code3` )
ON DELETE CASCADE
ON UPDATE CASCADE
, ADD INDEX `fk_user_geo_IPGeo1` (`fi_country` ASC) ;
Однако это утверждение не выполняется с ошибкой 150. Обе таблицы имеют вид utf8, оба столбца имеют одинаковый тип данных. Я что-то упускаю здесь жизненно важное?
Примечания
Таблица user
существует, имеет все ссылки и на самом деле не имеет отношения к проблеме. Я оставил его, чтобы мне не нужно было слишком много редактировать заявление.