EDIT
Просто чтобы добавить немного ясности к тому, чего я пытаюсь достичь с помощью этого дизайна. Данные будут вставлены в таблицу tbl1, которая будет входом пользователя.
Мое намерение состоит в том, чтобы хранить различные возможные значения для foo в tbl2. Таким образом, к каждому возможному значению foo присваивается уникальный идентификатор.
КОНЕЦ РЕДАКТИРОВАНИЯ
У меня есть две таблицы с синтаксисом:
CREATE TABLE `tbl1` (
`id` int(10) unsigned NOT NULL auto_increment,
`foo` int(10) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY(`foo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `tbl2` (
`id` int(10) unsigned NOT NULL auto_increment,
`value` varchar(100) NOT NULL default '',
PRIMARY KEY(`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DELIMITER //
DROP TRIGGER `trigger1`//
CREATE TRIGGER `trigger1` BEFORE INSERT ON `tbl1`
FOR EACH ROW BEGIN
DECLARE x INT(10);
IF (SELECT COUNT(*) FROM `tbl2` WHERE `value`= NEW.foo) = 0 THEN INSERT INTO `tbl2` (`value`) VALUES (NEW.foo); SET x=last_insert_id();\
ELSE SET x=(SELECT `id` FROM `tbl2` WHERE `value`= NEW.foo);
END IF;
SET NEW.foo=x;
END//
DELIMITER ;
Проблема заключается в том, что MySQL отклоняет значение varchar для foo и, следовательно, вставку следующим образом:
INSERT INTO tbl1
(foo) VALUES ('bar');
Вставит запись в tbl2 со значением 0.
Существуют ли другие подходы к этому, которые могут достичь правильного результата (без изменения foo на varchar)?