EDIT このデザインで達成しようとしていることを少し明確にするだけです。データはユーザエントリとなるtbl1に挿入されます。 私はtoo2にfooの考えられるさまざまな値を格納しようと考えています。そのように、それぞれの可能なfoo値に固有のIDが付けられています。外部キー文字列の挿入トリガーをintにする
のEND EDIT
私は、構文を持つ2つのテーブルがあります。問題は、次のようにMySQLがfooのvarchar型の値ひいては挿入を拒否していることである
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 ;
を: は(tbl1
。INSERT INTO foo)VALUES( 'bar'); 値が0のtbl2にレコードを挿入します。
fooをvarcharに変更せずに正しい結果を得るための方法はありますか?
に「バー」は変換された値を、実行される前にだから私は何を意図してやるべきことはMySQL、私はこのタイプのvarcharフィールドに固執しなければならなかった。 –