mysql script değişkenleri ve maksimum fonksiyon

Soru oldukça basit. Çözümü bulamadım bu yüzden soruyorum. İşte bir * .sql dosyasının içeriği:

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);

betiği çalıştırdığımda, @max_command_idx öğesinin sabit bir değer olmasını bekledim.bu, sonraki ekleme ifadelerinin her ikisinde de "aynı" değerin yerini alması gerektiği anlamına geliyordu. Ama bunu yapmadı. Ne yaptı, her ekleme ifadesi için max_command_idx değerini yeni vermekti. Neden? ve bunu nasıl çözebilirim? teşekkür ederim

0
Daha iyi bir cevap için [burada] [1] 'e bakınız. [1]: stackoverflow.com/sorular/7992889/& hellip;
katma yazar rahman, kaynak

1 cevap

İlk satır, aslında bir boole durumu seçtiğinden @max_command_idx değerinin null olmasını sağlar. Yani bunu çalıştırırken:

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

Aslında, "eğer @max_command_idx geçerli maksimum komut_idx + 1'e eşitse beni seç, beni seç ve eğer bana @max_command_idx boş ise beni seç."

Senin durumunda @max_command_idx null olur, bu yüzden boole sonucu null olur, çünkü @max_command_idx sonraki insertlerin her birinde yeniden başlatılırmış gibi görünür.

Bunu dene:

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);

Ne istiyorsan yapmalısın ...

1
katma
yeaaaaaaaaah, tanx dud.
katma yazar rahman, kaynak
bazı önemli güncellemeler. Komut tablomda, command_idx sütununda bir auto_increment özniteliği vardı. Bu nedenle yukarıdaki anser özel durumda doğru olurdu ancak aşağıdaki durumlarda işe yaramaz: 1-komuta tablosu, başka bir tabloda çalışan bir betikte boş 2-use @max_command_idx (FK'si olarak command_idx kullanır)
katma yazar rahman, kaynak