2012-01-05 3 views
1

主キー値を割り当てるmysqlトリガに問題があります。トリガから自動インクリメント値を読み書きする

v_object:私のテーブルを検討v_object_id、CREATE_DATE ..いくつかの一般的な属性を
ユーザー:user_idを、名..ユーザーの属性

次のように私は、ユーザー表にトリガーを持っています:

create trigger new_vobject_for_user before insert on users 
for each row begin 
    insert into v_object(v_type,...) values(...); 
    set NEW.id = // How do i get the new v_object's id here? 
end; 

私はユーザーを挿入するときにvobjectを作成し、user_idの新しい自動インクリメント値を使用する必要があります。

また、IDを指定せずにユーザーを挿入する方法があるかどうかを知りたいと思います。例:

insert into users(n1,n2,n3,...) values(m1,m2,m3,...); 

user_idが指定されていないというエラーが表示されます。それは本当です..私がしようとしているのは、オブジェクト&がトリガーでIDを生成することです。

+0

あなたはそれがオートインクリメント・カラムではありません、INSERT文で 'user_id'を省略することができない場合。 –

+0

user_idは自動インクリメントではありません。 vobjectのIDは自動インクリメントです –

+0

私はその質問のビットを理解していません。明示的な値を設定しないと、MySQLが 'users.user_id'で何をしたいのですか? –

答えて

1

使用LAST_INSERT_ID()

create trigger new_vobject_for_user before insert on users 
for each row begin 
    insert into v_object(v_type,...) values(...); 
    set NEW.id = LAST_INSERT_ID(); 
end; 

は、代わりにINFORMATION_SCHEMAのテーブルを見ていると、最後のインサートIDを取得するために

create trigger new_vobject_for_user before insert on users 
for each row begin 
    insert into v_object(v_type,...) values(...); 
    set NEW.id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES 
     WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'v_object') 
end; 
+1

期待できる副作用について教えてください。 –

+0

OK、それは私のせいでした。 http://dev.mysql.com/doc/refman/5.0/ja/trigger-syntax.htmlによれば、同じタイプと実行時間のトリガを1つしか持てないということです。 Oracleは複数のトリガーを許可しますが、MySQLは使用できません。 – rabudde

+0

insertステートメントはどうですか?どのように私は挿入文でuser_idを避けることができますか? –

1

SELECT @Result:=LAST_INSERT_ID();テーブルv_objectのための最後の自動インクリメントを取得します。

または

SET Result=LAST_INSERT_ID(); 
SELECT Result; 
+0

トリガーの 'SELECT'が失敗し、' SET'だけが使用されます。 – rabudde

関連する問題