Zwrot pola zaraz po INSERT 'cie (teoria)
ULANOW - 29-08-2007 00:10
Zwrot pola zaraz po INSERT 'cie (teoria)
Witam, czy jest mozliwe wykonanie w jednym zapytaniu Mysql 4.1 nastepujacej czynnosci? Zwrocic pole id po wykonaniu INSERT INTO test ('id', 'nazwa') VALUES ('', 'cos_tam')
Baza: test
id | nazwa | ---+--------+
id jest indexem unikalnym z autoinkrementacja
Pozdrawiam ULA
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Grzegorz Danowski - 29-08-2007 00:11
" ULANOW" <ulanow@WYTNIJ.gazeta.pl> wrote in message news:fb0ks8$akk$1@inews.gazeta.pl... > czy jest mozliwe wykonanie w jednym zapytaniu Mysql 4.1 nastepujacej > czynnosci? > Zwrocic pole id po wykonaniu INSERT INTO test ('id', 'nazwa') VALUES ('', > 'cos_tam')
Spróbuj: Select @@Identity
-- Pozdrawiam Grzegorz http://gdanowski.blogspot.com/
- 29-08-2007 00:11
Grzegorz Danowski <gdn__na@serwerze__poczta.onet.pl> napisał(a):
> " ULANOW" <ulanow@WYTNIJ.gazeta.pl> wrote in message > news:fb0ks8$akk$1@inews.gazeta.pl... > > czy jest mozliwe wykonanie w jednym zapytaniu Mysql 4.1 nastepujacej > > czynnosci? > > Zwrocic pole id po wykonaniu INSERT INTO test ('id', 'nazwa') VALUES ('', > > 'cos_tam') > > Spróbuj: > Select @@Identity >
A mozesz mi podpowiedziec jak napisac pelne query?
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
keczerad - 29-08-2007 00:11
Grzegorz Danowski pisze: > " ULANOW" <ulanow@WYTNIJ.gazeta.pl> wrote in message > news:fb0ks8$akk$1@inews.gazeta.pl... >> czy jest mozliwe wykonanie w jednym zapytaniu Mysql 4.1 nastepujacej >> czynnosci? >> Zwrocic pole id po wykonaniu INSERT INTO test ('id', 'nazwa') VALUES ('', >> 'cos_tam') > > Spróbuj: > Select @@Identity >
to @Identity to z MSSQL z MySQL to :
Select LAST_INSERT_ID()
--
keczerad
http://www.e-mo.com.pl sklep w (X)HTML wraz z modulem do Subiekta GT
Grzegorz Danowski - 29-08-2007 00:11
"keczerad" <keczerad@poczta.fm> wrote in message news:fb1ggf$nue$2@mx1.internetia.pl... >>> Zwrocic pole id po wykonaniu INSERT INTO test ('id', 'nazwa') VALUES >>> ('', >>> 'cos_tam') >> >> Spróbuj: >> Select @@Identity >> > > to @Identity to z MSSQL z MySQL to : > > Select LAST_INSERT_ID()
Przyznam się, że nie używam MySQL, ale w takim razie dziwne zatem, ze piszą w dokumentacji: "This variable is a synonym for the LAST_INSERT_ID variable. It exists for compatibility with other database systems. As of MySQL 3.23.25, you can read its value with SELECT @@IDENTITY."
http://dev.mysql.com/doc/refman/4.1/en/set-option.html -- Pozdrawiam Grzegorz http://gdanowski.blogspot.com/
keczerad - 29-08-2007 00:11
Grzegorz Danowski pisze:
> Przyznam się, że nie używam MySQL, ale w takim razie dziwne zatem, ze > piszą w dokumentacji: > "This variable is a synonym for the LAST_INSERT_ID variable. It exists > for compatibility with other database systems. As of MySQL 3.23.25, you > can read its value with SELECT @@IDENTITY." > > http://dev.mysql.com/doc/refman/4.1/en/set-option.html
fakt zylem w glebokiej nieswiadomosci , oba dzialaja w wersji w jakiej sprawdzalem 5.0.24-community-nt-log, przyznam sie szczerze ze korzystalem tylko z LAST_INSERT_ID()
--
keczerad
http://www.e-mo.com.pl sklep w (X)HTML wraz z modulem do Subiekta GT
ULA - 29-08-2007 00:11
keczerad <keczerad@poczta.fm> napisał(a):
> Grzegorz Danowski pisze: > > > Przyznam się, że nie używam MySQL, ale w takim razie dziwne zatem, ze > > piszą w dokumentacji: > > "This variable is a synonym for the LAST_INSERT_ID variable. It exists > > for compatibility with other database systems. As of MySQL 3.23.25, you > > can read its value with SELECT @@IDENTITY." > > > > http://dev.mysql.com/doc/refman/4.1/en/set-option.html > > fakt zylem w glebokiej nieswiadomosci , oba dzialaja w wersji w jakiej > sprawdzalem 5.0.24-community-nt-log, przyznam sie szczerze ze > korzystalem tylko z LAST_INSERT_ID()
Kochani, Ale zstanawiam sie czy w przypadku bazy globalnej z duża iloscia polaczen (prawie w tym samy czasie) Wasze rozwazania sa poprawne? Wezmy pod uwage ze podaczas wykonywania INSERT'u ktos inny (inny uzytkownik) bedzie popelnial INSERT i czy LAST_INSERT_ID() bedzie moje czy mojego nastepcy? Mowiłam ze to teoria.
PS. Maznijcie prosze troszke kodu. >
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Jacek - 29-08-2007 00:11
To mi wyglada, jak zastanawianie sie nad jajkiem i kura:)
A.L.E.C - 29-08-2007 00:11
ULA wrote:
> Ale zstanawiam sie czy w przypadku bazy globalnej z duża iloscia polaczen > (prawie w tym samy czasie) Wasze rozwazania sa poprawne? > Wezmy pod uwage ze podaczas wykonywania INSERT'u ktos inny (inny uzytkownik) > bedzie popelnial INSERT i czy LAST_INSERT_ID() bedzie moje czy mojego nastepcy?
będzie twoje
> PS. > Maznijcie prosze troszke kodu.
Wracając do pierwotnego pytania odpowiedź brzmi: nie da się.
-- Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252 LAN Management System Developer http://lms.alec.pl
mojeza - 29-08-2007 00:11
On Aug 28, 1:31 pm, Jacek <ad...@moj.pl> wrote: > To mi wyglada, jak zastanawianie sie nad jajkiem i kura:)
No nie koniecznie, wychodzac z Twojego zalozenia mozna sobie narobic klopotow. W MS SQL istnieja 3 sposoby aby uzyskac identity column po INSERT, napewno w MySQL sa takie same odpowiedniki:
<COPY BOL> SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY are similar functions in that they return values inserted into IDENTITY columns.
IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT returns the value generated for a specific table in any session and any scope. For more information, see IDENT_CURRENT.
SCOPE_IDENTITY and @@IDENTITY will return last identity values generated in any table in the current session. However, SCOPE_IDENTITY returns values inserted only within the current scope; @@IDENTITY is not limited to a specific scope.
For example, you have two tables, T1 and T2, and an INSERT trigger defined on T1. When a row is inserted to T1, the trigger fires and inserts a row in T2. This scenario illustrates two scopes: the insert on T1, and the insert on T2 as a result of the trigger.
Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and SCOPE_IDENTITY will return different values at the end of an INSERT statement on T1.
@@IDENTITY will return the last IDENTITY column value inserted across any scope in the current session, which is the value inserted in T2.
SCOPE_IDENTITY() will return the IDENTITY value inserted in T1, which was the last INSERT that occurred in the same scope. The SCOPE_IDENTITY() function will return the NULL value if the function is invoked before any insert statements into an identity column occur in the scope. </COPY BOL>
Tak wiec nalezy znalesc odpowiednik SCOPE_IDENTITY() w MySQL i nie bedzie problemow.
Ula - 29-08-2007 00:11
mojeza <najyer@hotmail.com> napisał(a):
> On Aug 28, 1:31 pm, Jacek <ad...@moj.pl> wrote: > > To mi wyglada, jak zastanawianie sie nad jajkiem i kura:) > > No nie koniecznie, wychodzac z Twojego zalozenia mozna sobie narobic > klopotow. W MS SQL istnieja 3 sposoby aby uzyskac identity column po > INSERT, napewno w MySQL sa takie same odpowiedniki: > > <COPY BOL> > SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY are similar functions in > that they return values inserted into IDENTITY columns. > > IDENT_CURRENT is not limited by scope and session; it is limited to a > specified table. IDENT_CURRENT returns the value generated for a > specific table in any session and any scope. For more information, see > IDENT_CURRENT. > > SCOPE_IDENTITY and @@IDENTITY will return last identity values > generated in any table in the current session. However, SCOPE_IDENTITY > returns values inserted only within the current scope; @@IDENTITY is > not limited to a specific scope. > > For example, you have two tables, T1 and T2, and an INSERT trigger > defined on T1. When a row is inserted to T1, the trigger fires and > inserts a row in T2. This scenario illustrates two scopes: the insert > on T1, and the insert on T2 as a result of the trigger. > > Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and > SCOPE_IDENTITY will return different values at the end of an INSERT > statement on T1. > > @@IDENTITY will return the last IDENTITY column value inserted across > any scope in the current session, which is the value inserted in T2. > > SCOPE_IDENTITY() will return the IDENTITY value inserted in T1, which > was the last INSERT that occurred in the same scope. The > SCOPE_IDENTITY() function will return the NULL value if the function > is invoked before any insert statements into an identity column occur > in the scope. > </COPY BOL> > > Tak wiec nalezy znalesc odpowiednik SCOPE_IDENTITY() w MySQL i nie > bedzie problemow. > Wykonanie ponizszego kodu generuje blas
insert into test (id,name) value ('','test'); SELECT @@IDENTITY;
#1064 - Something is wrong in your syntax obok '@IDENTITY' w linii 1
Samo uzycie SELECT @IDENTITY; zwaraca NULL
Panowie inne pomysly?
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
keczerad - 29-08-2007 00:11
Ula pisze: > mojeza <najyer@hotmail.com> napisał(a): > >> On Aug 28, 1:31 pm, Jacek <ad...@moj.pl> wrote: >>> To mi wyglada, jak zastanawianie sie nad jajkiem i kura:) >> No nie koniecznie, wychodzac z Twojego zalozenia mozna sobie narobic >> klopotow. W MS SQL istnieja 3 sposoby aby uzyskac identity column po >> INSERT, napewno w MySQL sa takie same odpowiedniki: >> >> <COPY BOL> >> SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY are similar functions in >> that they return values inserted into IDENTITY columns. >> >> IDENT_CURRENT is not limited by scope and session; it is limited to a >> specified table. IDENT_CURRENT returns the value generated for a >> specific table in any session and any scope. For more information, see >> IDENT_CURRENT. >> >> SCOPE_IDENTITY and @@IDENTITY will return last identity values >> generated in any table in the current session. However, SCOPE_IDENTITY >> returns values inserted only within the current scope; @@IDENTITY is >> not limited to a specific scope. >> >> For example, you have two tables, T1 and T2, and an INSERT trigger >> defined on T1. When a row is inserted to T1, the trigger fires and >> inserts a row in T2. This scenario illustrates two scopes: the insert >> on T1, and the insert on T2 as a result of the trigger. >> >> Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and >> SCOPE_IDENTITY will return different values at the end of an INSERT >> statement on T1. >> >> @@IDENTITY will return the last IDENTITY column value inserted across >> any scope in the current session, which is the value inserted in T2. >> >> SCOPE_IDENTITY() will return the IDENTITY value inserted in T1, which >> was the last INSERT that occurred in the same scope. The >> SCOPE_IDENTITY() function will return the NULL value if the function >> is invoked before any insert statements into an identity column occur >> in the scope. >> </COPY BOL> >> >> Tak wiec nalezy znalesc odpowiednik SCOPE_IDENTITY() w MySQL i nie >> bedzie problemow. >> > Wykonanie ponizszego kodu generuje blas > > insert into test (id,name) value ('','test'); > SELECT @@IDENTITY; > > #1064 - Something is wrong in your syntax obok '@IDENTITY' w linii 1 > > Samo uzycie > SELECT @IDENTITY; zwaraca NULL > > Panowie inne pomysly?
a dodajesz cos w insercie ?
bo twoj insert jest zly : insert into test (id,name) value (NULL,'test'); badz taki insert into test (name) value ('test');
przy zalazeniu ze id to autoincrement
a dzila na 100% bo wykorzystuje w aplikacji pisanej C# w php wykorzystuje mysql_insert_id();
--
keczerad
http://www.e-mo.com.pl sklep w (X)HTML wraz z modulem do Subiekta GT
sash668 - 29-08-2007 00:11
" Ula" <ulanow@NOSPAM.gazeta.pl> in news:fb1qmv$h6s$1@inews.gazeta.pl wrote:
> Wykonanie ponizszego kodu generuje blas > > insert into test (id,name) value ('','test');
Hmm, a ten insert w ogóle działa? "id" masz pewnie typu liczbowego, to podanie '' (pustego stringa) chyba nie powinno przejść (MSSQL np. nie przyjmie).
> SELECT @@IDENTITY; > > #1064 - Something is wrong in your syntax obok '@IDENTITY' w linii > 1 > > Samo uzycie > SELECT @IDENTITY; zwaraca NULL > > Panowie inne pomysly?
Jesli insert jest ok, to może jednak "starą" metodą:
SELECT LAST_INSERT_ID();
-- Best regards sash668 na dżimejl dot kom
- 29-08-2007 00:11
keczerad <keczerad@poczta.fm> napisał(a):
> Ula pisze: > > mojeza <najyer@hotmail.com> napisał(a): > > > >> On Aug 28, 1:31 pm, Jacek <ad...@moj.pl> wrote: > >>> To mi wyglada, jak zastanawianie sie nad jajkiem i kura:) > >> No nie koniecznie, wychodzac z Twojego zalozenia mozna sobie narobic > >> klopotow. W MS SQL istnieja 3 sposoby aby uzyskac identity column po > >> INSERT, napewno w MySQL sa takie same odpowiedniki: > >> > >> <COPY BOL> > >> SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY are similar functions in > >> that they return values inserted into IDENTITY columns. > >> > >> IDENT_CURRENT is not limited by scope and session; it is limited to a > >> specified table. IDENT_CURRENT returns the value generated for a > >> specific table in any session and any scope. For more information, see > >> IDENT_CURRENT. > >> > >> SCOPE_IDENTITY and @@IDENTITY will return last identity values > >> generated in any table in the current session. However, SCOPE_IDENTITY > >> returns values inserted only within the current scope; @@IDENTITY is > >> not limited to a specific scope. > >> > >> For example, you have two tables, T1 and T2, and an INSERT trigger > >> defined on T1. When a row is inserted to T1, the trigger fires and > >> inserts a row in T2. This scenario illustrates two scopes: the insert > >> on T1, and the insert on T2 as a result of the trigger. > >> > >> Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and > >> SCOPE_IDENTITY will return different values at the end of an INSERT > >> statement on T1. > >> > >> @@IDENTITY will return the last IDENTITY column value inserted across > >> any scope in the current session, which is the value inserted in T2. > >> > >> SCOPE_IDENTITY() will return the IDENTITY value inserted in T1, which > >> was the last INSERT that occurred in the same scope. The > >> SCOPE_IDENTITY() function will return the NULL value if the function > >> is invoked before any insert statements into an identity column occur > >> in the scope. > >> </COPY BOL> > >> > >> Tak wiec nalezy znalesc odpowiednik SCOPE_IDENTITY() w MySQL i nie > >> bedzie problemow. > >> > > Wykonanie ponizszego kodu generuje blas > > > > insert into test (id,name) value ('','test'); > > SELECT @@IDENTITY; > > > > #1064 - Something is wrong in your syntax obok '@IDENTITY' w linii 1 > > > > Samo uzycie > > SELECT @IDENTITY; zwaraca NULL > > > > Panowie inne pomysly? > > a dodajesz cos w insercie ? > > bo twoj insert jest zly : > insert into test (id,name) value (NULL,'test'); > badz taki > insert into test (name) value ('test'); > > przy zalazeniu ze id to autoincrement > > a dzila na 100% bo wykorzystuje w aplikacji pisanej C# w php > wykorzystuje mysql_insert_id(); >
Zgadzam sie ze mysql_insert_id(); zwroci nr wiersza ale jak zrobic to w czystym SQL'u?
INSERT INTO test (id,name) VALUE (NULL,'test'); ..... i tu co?
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
keczerad - 29-08-2007 00:11
ulanow@NOSPAM.gazeta.pl pisze: > Zgadzam sie ze mysql_insert_id(); zwroci nr wiersza ale jak zrobic to w > czystym SQL'u? > > INSERT INTO test (id,name) VALUE (NULL,'test'); > .... i tu co? >
wszystko dziala, naprawde nie wiem o co chodzi :
--tabela DROP TABLE IF EXISTS `test1`.`test`; CREATE TABLE `test1`.`test` ( `id` int(10) unsigned NOT NULL auto_increment, `od` date NOT NULL default '0000-00-00', `do` date NOT NULL default '0000-00-00', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
---pierwsza wersja DELIMITER $$
DROP PROCEDURE IF EXISTS `test1`.`test2` $$ CREATE PROCEDURE `test2`() BEGIN Insert test(id, od, do) VALUES (NULL,'2007-01-01','2007-01-01'); Select @@Identity; END $$
DELIMITER ;
-------druga wersja DELIMITER $$
DROP PROCEDURE IF EXISTS `test1`.`test2` $$ CREATE PROCEDURE `test2`() BEGIN Insert test(id, od, do) VALUES (NULL,'2007-01-01','2007-01-01'); Select LAST_ISERT_ID(); END $$
DELIMITER ;
----wykonanie
CALL test(2);
ja mam mysql w wersji 5.0.24 jak podalem wczesniej
--
keczerad
http://www.e-mo.com.pl sklep w (X)HTML wraz z modulem do Subiekta GT
Piotr Smyrak - 30-08-2007 00:01
On 2007-08-28, ULA <ulanow@NOSPAM.gazeta.pl> wrote: > keczerad <keczerad@poczta.fm> napisał(a): > >> Grzegorz Danowski pisze: >> >> > Przyznam się, że nie używam MySQL, ale w takim razie dziwne zatem, ze >> > piszą w dokumentacji: >> > "This variable is a synonym for the LAST_INSERT_ID variable. It exists >> > for compatibility with other database systems. As of MySQL 3.23.25, you >> > can read its value with SELECT @@IDENTITY." >> > >> > http://dev.mysql.com/doc/refman/4.1/en/set-option.html >> >> fakt zylem w glebokiej nieswiadomosci , oba dzialaja w wersji w jakiej >> sprawdzalem 5.0.24-community-nt-log, przyznam sie szczerze ze >> korzystalem tylko z LAST_INSERT_ID() > > Kochani, > Ale zstanawiam sie czy w przypadku bazy globalnej z duża iloscia polaczen > (prawie w tym samy czasie) Wasze rozwazania sa poprawne? > Wezmy pod uwage ze podaczas wykonywania INSERT'u ktos inny (inny uzytkownik) > bedzie popelnial INSERT i czy LAST_INSERT_ID() bedzie moje czy mojego nastepcy?
Twoje. LAST_INSERT_ID() działa w kontekście aktualnego połączenia z bazą, więc zwraca id ostatniego dokonanego _w_ramach_tego_połączenia_ insertu.
-- Piotr Smyrak
Krzysztof =?iso-8859-2?Q?Krzy=BFaniak?= - 10-09-2007 00:03
" ULA" <ulanow@NOSPAM.gazeta.pl> writes:
[..] >> > Przyznam się, że nie używam MySQL, ale w takim razie dziwne zatem, ze >> > piszą w dokumentacji: >> > "This variable is a synonym for the LAST_INSERT_ID variable. It exists >> > for compatibility with other database systems. As of MySQL 3.23.25, you >> > can read its value with SELECT @@IDENTITY." >> > >> > http://dev.mysql.com/doc/refman/4.1/en/set-option.html >> >> fakt zylem w glebokiej nieswiadomosci , oba dzialaja w wersji w jakiej >> sprawdzalem 5.0.24-community-nt-log, przyznam sie szczerze ze >> korzystalem tylko z LAST_INSERT_ID() > > Kochani, > Ale zstanawiam sie czy w przypadku bazy globalnej z duża iloscia polaczen > (prawie w tym samy czasie) Wasze rozwazania sa poprawne?
Tak.
> Wezmy pod uwage ze podaczas wykonywania INSERT'u ktos inny (inny uzytkownik) > bedzie popelnial INSERT i czy LAST_INSERT_ID() bedzie moje czy mojego nastepcy? > Mowiłam ze to teoria.
Twoje.
eloy -- -------e-l-o-y----------------------------e-l-o-y-@-k-o-f-e-i-n-a-.-n-e-t------
jak to dobrze, że są oceany - bez nich byłoby jeszcze smutniej
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
Insert do tabeli danymi z innej tabeli Firebird
[mssql] insert do tabeli na podstawie danych z innej tabeli
Insert do tabeli z danych innej tabeli plus dodatkowa wartośćpola (Firebird)
Jak =?ISO-8859-2?Q?zamieni=E6_dwa_pola_jednej_kolumny_?==?ISO-8859-2?Q?w_dw=F3ch_rekordach_za_pomoc=B1_jednego_zapyt? ==?ISO-8859-2?Q?ania=3F?=
Import faktur do Insert Subiekt GT oraz Wapro Wf-Mag z innego programu
=?iso-8859-2?Q?=5BMySQL=5D_i_MS_Acccess_insert_do_dw=F3ch_tab el?=
[MSSQL 2000] czas wykonywania instrukcji INSERT - czy zalezy od ilosci danych w tabeli?
Jak =?ISO-8859-2?Q?pobra=E6_mo=BFliwe_warto=B6ci_z_pola_?==?ISO-8859-2?Q?typu_ENUM?=
[MySQL] Jaki typ pola aby =?ISO-8859-2?Q?trzyma=E6_liczby_od?==?ISO-8859-2?Q?dzielone_przecinkiem_=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.pltejsza.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|