mysqlのスクリプト変数とmax関数

質問はかなり簡単です。私はちょうど解決策を見つけることができなかったので、 * .sqlファイルの内容は次のとおりです。

select @max_command_idx=max(command_idx)+1  from command;
insert into command values(3,0,@max_command_idx+1 ,"sub","ctrlr",1,0,"plan",0);
insert into command values(4,1,@max_command_idx+1 ,"sub","ctrlr",1,0,"pla1n",0);

私がスクリプトを実行したとき、私は@max_command_idxが固定値であることを期待していました。つまり、後続の両方の挿入文で "同じ"値を置き換える必要があります。しかし、それはしませんでした。それは、それぞれのinsert文に対してmax_command_idxの新しい価値を与えることでした。 何故ですか?どのように私はそれを解決することができますか? ありがとうございました

0
より良い答えは[ここ] [1]を参照してください。 [1]: stackoverflow.com/questions/7992889 /…
追加された 著者 rahman,

1 答え

最初の行は、実際にブール条件を選択しているので、@max_command_idxをnullに設定します。だからこれを実行するとき:

select @max_command_idx=max(command_idx)+1  from command;

実際には、「@max_command_idxが現在の最大command_idx + 1と等しい場合は1を選択し、そうでない場合はme 0を選択し、@max_command_idxがnullの場合はnullを選択します」と言っています。

あなたのケースでは、@max_command_idxはnullなので、ブール結果はヌルです。したがって、後続の各挿入で@max_command_idxが再初期化されたように見えます。

これを試して:

select max(command_idx)+1 into @max_command_idx  from command;
insert into command values(3,0,@max_command_idx+1 ,"sub","ctrlr",1,0,"plan",0);
insert into command values(4,1,@max_command_idx+1 ,"sub","ctrlr",1,0,"pla1n",0);

あなたがしたいことをしなければならない...

1
追加された
yeaaaaaaaaah、tanx dud。
追加された 著者 rahman,
いくつかの重要な更新。私のコマンドテーブルは、command_idxカラムにauto_increment属性を持っていました。なぜなら、上記のanserは特別な場合には当てはまりますが、次のような場合には機能しません:1コマンドテーブル自体は空です2別のテーブルで動作しているスクリプトの@max_command_idx(FKとしてcommand_idxを使用)
追加された 著者 rahman,