Her bir tablo değeri için yeni kimlik oluşturmak ve döndürmek için MySQL StoredProcedure yazdım, ancak MySQL WorkBench ve Java uygulamasından last_insert_id() öğesinde yanlış değer alıyor.MYSQL LAST_INSERT_ID amaçlandığı gibi çalışmıyor. Nasıl düzeltebilirim?
Bu yordam, birden çok oturumdan çağrılacak.
CALL `GET_NEW_ID`('test', @test);
select @test;
O "141215000000" bana verir ve bu() last_insert_id demektir 0 her zaman döndürür. Gördüğüm gibi doğru şekilde yeni verileri seq_data'ya ekledim.
Tablo böyle görünüyor.
CREATE TABLE `seq_data` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`name` varchar(20) COLLATE utf8_bin NOT NULL,
`stat_date` varchar(8) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`,`name`,`stat_date`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Amacım gibidir ...
CALL `GET_NEW_ID`('test', @test);
select @test;
dönüş 141215000001
CALL `GET_NEW_ID`('test', @test);
select @test;
dönüş 141215000002
CALL `GET_NEW_ID`('hello', @test);
select @test;
dönüş 141215000001
Teşekkür @Dondon: Senin durumunda
, sen id ekleme, bu nedenle AUTO_INCREMENT değeri dolayısıyla LAST_INSERT_ID döner 0.
Sen gibi bir şey deneyebilirsiniz oluşturulmaz. Ama ben zaten bunu denedim ve id ekleyerek neden farklı bir sütun 'isim' için yeni bir kimlik almaktır. Örneğin, tablo için yeni bir kimlik almak istiyorsam, test tablosu adı için başka bir kimlik 1 olduğundan, kimliği 1'den başlamaz. – handicop
Tekrar, Teşekkür ederim @Dodon, neden istediğim gibi çalışmadığını açıklıyor, sorunu çözmek için bir geçici çözüm bulmam gerekiyor. – handicop
@handicop Yanlış yapıyorsunuz. Kendinize yeni bir ID oluşturma ve * sonra * manuel olarak eklemek doğru cevap değildir. Bir başlangıç için işlem gereksinimlerine bakar. Hatta * bir 'GET_NEW_ID()' prosedürüne sahip olmamalısınız. Otomatik olarak "INSERT" in bir yan etkisi olan "AUTO_INCREMENT" anahtarıyla bir tabloda gerçekleşmelidir. – EJP