2016-09-08 2 views
0

のは、私はこのようになりますテーブルがあるとしましょう:使用のID列

CREATE TABLE Foo (
    fooSn INT NOT NULL AUTO_INCREMENT, 
    fooId VARCHAR(64) NOT NULL, 
    PRIMARY KEY (fooSn) 
) 
ENGINE=InnoDB 
ROW_FORMAT=DYNAMIC; 

をそして、私はこのような何かをしたい:

CREATE PROCEDURE insertWithAutoId (
    p_myPrefix VARCHAR(32) NOT NULL, 
) 
BEGIN 
    INSERT INTO Foo 
     (fooSn, fooId) 
    VALUES 
     (DEFAULT, CONCAT(p_myPrefix, DEFAULT)); 
END 

はこれです可能?

+1

本当にこれが必要な場合は、それを行うhttp://stackoverflow.com/a/17894239/1920232 – peterm

+0

それは複雑ですが、それは動作します!頭がおかげでありがとうが、私はそのルートを下るとは思わない。 – IsenGrim

+0

私は文字列接頭辞とAUTO_INCRMENTから返された値の連結として 'fooId'カラムを格納するための要件を調べるでしょう。別の方法として、プレフィックスを別の列に格納することを検討してください。 2つの列を結合(連結)する必要がある場合は、それを必要とするクエリのSELECTリストに式を使用します。しかし、述語(WHERE句の条件など)でCONCAT()式を使用することは望ましくありません。 – spencer7593

答えて

1

いいえ行を追加するINSERTステートメント内のAUTO_INCREMENT列に割り当てられた値を参照することはできません。この値はステートメント内で使用できません。また、BEFORE INSERTトリガーでは使用できません。

fooSn AUTO_INCREMENT列に割り当てられた値に基づいて、fooId列に値を割り当てるためにAFTER INSERTトリガーを作成することができます。しかし、これはちょうど挿入された行の更新を必要とし、AFTER INSERTトリガー内でそれを実行しようとすると、MySQLはエラー14442を発生させます。

関連する問題