У першому рядку буде встановлено значення @max_command_idx, що є нульовим, оскільки ви фактично вибираєте булеві умови. Отже, під час виконання цього:
select @max_command_idx=max(command_idx)+1 from command;
Фактично ви говорите "виберіть мене 1, якщо @max_command_idx дорівнює поточному максимальному command_idx + 1, оберіть мене 0, якщо це не так, і оберіть null, якщо @max_command_idx є нульовим".
У вашому випадку @max_command_idx є null, так що логічний результат 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);
Слід робити те, що ви хочете ...