|
Тема
|
izvli4ane na id
|
|
Автор | orlin (Нерегистриран) |
Публикувано | 05.03.03 10:26 |
|
MySQL & JAVA!!!
zdravejte vsi4ki, imam edin vapros svyrzan s izvli4ane na id, koeto e primary key ot
nowozapisan red v tablica:
create table groups
(
g_id int(4) not null auto_increment,
g_usr_id int(4) not null, # id na user suzdawa6t grupata
g_name char(15) not null, # ime na grupate
primary key(g_id)
);
usloviqta sa, 4e moje da sy6testvuvat n reda s ednakvi g_usr_id i g_name
tursq 100% siguren na4in da izwleka g_id sled kato sam zapisal nowa grupa.
primeren podhod e:
INSERT INTO groups (g_usr_id, g_name) VALUES (1001, 'my_new_group');
SELECT max(g_id) WHERE g_usr_id = 1001 AND g_name = my_new_group;
teoreti4no m/u dvete zaqvki, drug user, kojto se e lognal sas su6toto id(koeto e dopustimo) moje da syzdade su6tata grupa. v tozi slu4aj 6te polu4a negowoto g_id.
| |
Тема
|
Re: То си пише ...
[re: orlin]
|
|
Автор |
salle (минаващ) |
Публикувано | 05.03.03 10:46 |
|
LAST_INSERT_ID()
Редактирано от salle на 05.03.03 10:50.
| |
Тема
|
Re: То си пише ...
[re: salle]
|
|
Автор | svircho (Нерегистриран) |
Публикувано | 05.03.03 11:34 |
|
А какво ще стане, ако между insert-а и SELECT LAST_INSERT_ID(); има интервал от 2 секунди да кажем и в същото време друг потребител insert-не нов запис. Имам в предвид SELECT LAST_INSERT_ID() връща последното insert-нато ID за тази транзакция или по принцип ще върне last automatically generated value за това autoincrement поле. Защото ако е така, ще се изгуби логиката?
| |
Тема
|
Re: То си пише ...
[re: svircho]
|
|
Автор | perlsite (Нерегистриран) |
Публикувано | 05.03.03 13:24 |
|
Shte ti dam primer sys Perl i DBI interface-a.
my $resHand = $sth->execute();
$resHand e obect syszdaden sled kato si izvikal SQL zaqvkata za INSERT
sled koeto mojesh da izvikash:
$row = $sth->{'mysql_insertid'};
Koeto se otnasq tochno za posledniqt INSERT... s dve dumi... $sth se "popylva" po syshtoto vreme kogato se insert-va red-a i tyi kato zaqvkite v MySQL sa "atomic" ne e vyzmojno MySQL da ti vyrne greshno ID..dori i da imash 1000 zaqvki/sec.
V Java trqbwa da ima podobno neshto, tyi kato tova ne zavisi ot programniqt ezik a ot MySQL
| |
Тема
|
Къде го пише?
[re: perlsite]
|
|
Автор | svircho (Нерегистриран) |
Публикувано | 05.03.03 13:45 |
|
Именно за това става въпрос, къде в документацията на MySQL е указано, че става така, както ти казваш. Paste-вам от линка, който salle е дал за справка: "Note that as mysql_insert_id() is only updated after INSERT and UPDATE statements" и никъде не виждам, което ти твърдиш.
Докажи ми, че всичко това се случва в тази транзакция а не важи глобално. Ако някой друг направи insert и стойността на autoincrement полето се увеличи, то last_insert_id() и mysql_insert_id() какво ще върнат: последното insert-нато id за тази транзакция или последното insert-нато id в таблицата по принцип.
Просто ми е интересно как е решен този проблем в MySQL.
| |
Тема
|
Re: Къде ли не ...
[re: svircho]
|
|
Автор |
salle (минаващ) |
Публикувано | 05.03.03 15:10 |
|
Тази функция я има от години и тя работи точно по този начин.
И няма нищо общо с транзакциите!
LAST_INSERT_ID()
User Variables - @a := "a"
CREATE TEMPORARY ...
Всички тези са специфични за дадена Сесия!
Поне 20 пъти съм го обяснявал в този клуб а и във всички книги в които се споменава MySQL това се коментила обстойно - поне за LAST_INSERT_ID()
| |
Тема
|
Re: Толкова ли не можете да намерите това:
[re: salle]
|
|
Автор |
salle (минаващ) |
Публикувано | 05.03.03 15:21 |
|
8.4.6.3 How Can I Get the Unique ID for the Last Inserted Row?
...
The most recently generated ID is maintained in the server on a per-connection basis. It will not be changed by another client. It will not even be changed if you update another AUTO_INCREMENT column with a non-magic value (that is, a value that is not NULL and not 0).
| |
Тема
|
Re: Къде ли не ...
[re: salle]
|
|
Автор | svircho (Нерегистриран) |
Публикувано | 05.03.03 15:50 |
|
С тия изказвания:"Поне 20 пъти съм го обяснявал в този клуб" ти просто предизвикваш хората да се заяждат с теб. Със сигурност има и по нормален начин да го кажеш.
Но аз ще ти кажа само - благодаря за това, че ми обясни как е решен този проблем в MySQL!
| |
Тема
|
Re: Ми нека се заяждат ...
[re: svircho]
|
|
Автор |
salle (минаващ) |
Публикувано | 05.03.03 16:45 |
|
Ама това е старо като света дето се казва.
За справка пробвай:
| |
|
|
|
|