Megválaszolatlan hozzászólások | Aktív témák Pontos idő: pén. jan. 10, 2025 3:12



Hozzászólás a témához  [ 11 hozzászólás ] 
PHP+MYSQL update de azonnal 
Szerző Üzenet
vas-tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 8
Hozzászólás 
Köszi!
Azért mindig lehet tanulni valamit :)

Üdv!


pén. aug. 08, 2003 17:27
Profil Privát üzenet küldése ICQ
vas-tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 3
Hozzászólás 
update tabla set mezo = if (mezo = 0, 1,0);
(MySQL)


pén. aug. 08, 2003 17:14
Profil Privát üzenet küldése
vas-tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 8
Hozzászólás 
Sziasztok!

Köszönöm a hozzászólásokat.
A határidő nagy úr, ugyhogy meg kellett oldanom a dolgot.
Meg kell mondanom, hogy a lockolás bennem is felmerült,
de nem akartam élni vele. Mivel PHP-ban használom ami egy
script progi. Nem szeretnék úgy járni, hogy valami nem várt hiba miatt a lockolás alatt valamilyen hiba miatt
leáll a script és azon túl senki nem tud hozzáférni az
adatbázishoz (vagy egy részéhez). Ugyhogy ezt mellőztem.

A megoldás a következő lett:

SELECT elsőre kizárva. A már felmerült késlekedési probléma miatt.
Helyette UPDATE a megfelelő feltételt megadva.
Ahogy azt gixx is tirta
" UPDATE táblanév SET azabizonyosmezö=0 WHERE azabizonyosmezö=1( AND további feltételek.)"

Nekem még annyi hozzájött, hogy " LIMIT 1",
ugyanis mindig csak 1 rekordot szeretnék módosítani.
Ezenkívűl: az UPDATE mindig beleír egy egyedi infot a rekordba.

Mivel az UPDATE után meg lehet tudni, hogy az UPDATE
hány rekordot érintett, így nem kell a SELECT.
Amenyniben az érintett rekordok száma >0 akkor
volt olyan rekord ami a feltételnek elegett tett.
Mivel az UPDATE során bevittünk a rekordba egy
egyedi mezőértéket is, ennek alapján visszakereshető
az adott rekord.

Köszönöm mindenkinek aki segíteni próbált!

Üdv!


hétf. aug. 04, 2003 16:06
Profil Privát üzenet küldése ICQ

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 0
Hozzászólás 
esetleg egy subselectes update-t csinálj, de nézd meg, az általad használt dbkezelő ebben az esetben a többieknek mit enged az adott táblá(ko)n.


pén. aug. 01, 2003 12:50
Profil Privát üzenet küldése

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 0
Hozzászólás 
az a gond, hogy nagyobb mennyiségü rekordnál és párhuzamos irásoknál már adóhat ezzel a módszerrel is gond, mint ezt Hardhead irta is.

ha teheted, válts át postgre-re. a pg zárolásban némileg:p többet nyújt:

http://www.postgresql.org/docs/7.3/static/sql-lock.html


pén. aug. 01, 2003 11:03
Profil Privát üzenet küldése

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 0
Hozzászólás 
UPDATE táblanév SET azabizonyosmezö=0 WHERE azabizonyosmezö=1( AND további feltételek.)

Valami ilyesmire gondoltál?


csüt. júl. 31, 2003 22:31
Profil Privát üzenet küldése

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 0
Hozzászólás 
a lockolásokról itt vannak részletek (rövidben: innodb táblán tudsz sort lockolni)

http://www.mysql.com/doc/en/Locking_methods.html

a tranzakciókban résztvevő táblatipusok és módok pedig itt:

http://www.mysql.com/doc/en/ANSI_diff_Transactions.html


csüt. júl. 31, 2003 16:09
Profil Privát üzenet küldése

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 0
Hozzászólás 
A MySQL-ben használatos tábla tipusok nem mindegyike képes a tranzakciók kezeléslére.
Szerintem rekordok zárolása sem lehtséges, csak egész táblák-é.
Azt azért el kell mondjam hogy én 3 féle SQL mondatot használok SELECT; INSERT; UPDATE;
de a SELECT-hez már inkább varázslókat használok.
KB ennyit értek az adatbázishoz.


csüt. júl. 31, 2003 0:13
Profil Privát üzenet küldése

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 0
Hozzászólás 
lockold azt a rekordot addig, igy biztos. nézd meg, tranzakciókezelésre milyen lehetőségek vannak a mysqlben, ezzel még egyszerüsithetsz a dolgon. (ha összetettebb a dolog)


csüt. júl. 31, 2003 0:04
Profil Privát üzenet küldése

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 0
Hozzászólás 
Én SQL-hez nem nagyon értek,
Viszont van egy nagyon **** könyvem hozzá.

LOCK TABLE <táblaneve> IN {SHARE|EXCLUSIVE} MODE;

UNLOCK TABLE táblaneve;

A LOCK TABLE utasítással lehet egy táblázat zárolását kezdeményezni. a SHARE kulcsszó hatására egyidajüleg több felhasználó számára lehetővé válik a táblázat lekérdezése, de módosítása nem. Az EXCLUSIVE kulcsszó használatával a táblázatot a zárolást kezdeményező kizárolagos használatába vonja és felújítási müveletek is végrehajthat rajta.

Itt az idézet nem folyamatokról hanem felhasználokról beszél. Egy weboldal esetén ugyan olyan felhasználói névvel kapcsolodik minden folyamat.
Ha müködik folyamatokra akkor minden OK, de ha nem akkor megoldás lehet az hogy létre hozni még egy usert az adatbázishoz, és amikor zárolásra van szükség akkor MySQL_Change_User(), elvégezni a kivánt müveleteket, a zárolás feloldása, vissza jelentkezni.

A teszteléshez sok siker kivánok.


csüt. júl. 31, 2003 0:04
Profil Privát üzenet küldése
vas-tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 8
Hozzászólás 
Egy alkalmazásban kell megoldanom, hogy egy sort frissítsek az adatbázisban, ha az adott rekord bizonyos mezeje mondjuk 1 akkor legyen 0. Egyébként ne tegyen semmit.
SELECT -el ugye nem vizsgálhatom, mert mire vissza updatelem addigra lehet, hogy egy másik taszk közben megvizsgálja és még 1-et talál benne holott a másik szál már épp felül akarja írni.
Kérdésem az, hogy miképpen tudom korrektűl updatelni az adott rekordot, hogy tudja azt is, hogy történt -e update, ugyanakkor más taszk már elméletileg se tudja ugyanezt megtenni.

Köszönnöm!


szer. júl. 30, 2003 21:06
Profil Privát üzenet küldése ICQ
Hozzászólások megjelenítése:  Rendezés  
Hozzászólás a témához   [ 11 hozzászólás ] 

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 3 vendég


Nem nyithatsz témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Magyar fordítás © Magyar phpBB Közösség