2011-07-30 15 views
0

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に変更せずに正しい結果を得るための方法はありますか?

+0

に「バー」は変換された値を、実行される前にだから私は何を意図してやるべきことはMySQL、私はこのタイプのvarcharフィールドに固執しなければならなかった。 –

答えて

1
あなたがTBL1ウィッヒのテーブルのフィールドfooのに文字列を「バー」を挿入しようとしているので、それは動作しません

は、int型のものであり、thisに従って:

あなたが保存しようとした場合 数値列に数値で始まらない文字列、MySQLサーバに格納

0トリガーは0

+0

元の投稿には、私が何を後にしているかを説明するために、さらに明確になっています。 fooをvarchar(100)にする回避策は私の唯一の方法です。これを行うより良い方法がない限りです。 –

関連する問題