Archief - Commit, autocommit, ...

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

koebeest

Legacy Member
Hey,

Ik ben op zoek naar een manier om ofwel alle instructies door te sturen ofwel geen (in verband met instabiele connecties) dus hiervoor zou ik
Transactions gebruiken. Na wat prutsen en probeerwerk met volgende voorbeeldcode. (normaal zou hij niet mogen uitvoeren want ik zeg niet dat hij moet "committen" en autocommit zou moeten uitstaan)

Code:
SET autocommit=0;
BEGIN;
SELECT * FROM klant;

Ben ik tot de constatatie gekomen dat hij het dus wel blijft uitvoeren. Hoe kan ik dit fixen? Hij mag het dus niet uitvoeren als het faalt of er geen commit wordt meegegeven.

Ook nog een extra detail: ik draai hier nog MySQL 3.23 en kan niet updaten om tal van redenen.

thx!

Eternity00

Legacy Member
een SELECT-statement heeft ook geen commit nodig.. dat is maar data ophalen.
Commit heeft pas zijn nut zodra ge data gaat bijvoegen (INSERT) of update (UPDATE).

Hetgeen je voorbeeld doet is autocommit afzetten, een procedure beginnen (achter BEGIN hoort trouwens geen ; te staan) en dan een tabel tonen. Dit heeft helemaal geen commit nodig.

Best kan je proberen te testen door

Code:
SET autocommit=0;
BEGIN
  INSERT INTO klant VALUES (<testdata>);
END;
eerst te doen
dan database checken ofdat hij al iets heeft toegevoegd

dan
Code:
commit;
uitvoeren en weer checken.

PS1:
Code:
UPDATE klant set <column_name> = <testdata> where id = <...>
werkt ook ipv de INSERT. Update beperkt de hoeveelheid testrows in je tabel

PS2: Deze post is geschreven met enige kennis van Oracle, met MySQL-server heb ik nog niet gewerkt. Dus zelf nadenken en omzetten waar nodig :)


edit:even code-tags toegevoegd voor duidelijkheid.

RpR

Legacy Member
Ook op delete queries.

Zoals reeds gezegd zal hij bij een select gewoon direct uitvoeren.

taLa.

Legacy Member
Zorg er eerst maar voor dat ge met een table engine werkt die transactions ook effectief ondersteunt. Als ge met MyISAM werkt gaat ge nog lang kunnen proberen; die ondersteunt namelijk helemaal geen transactions. Een goede keuze voor een table engine die transactions wel ondersteunt is bv. InnoDB. Dan zou autocommit zelfs geen invloed mogen hebben, want statements binnen een expliciet gestarte transactie worden nooit automatisch gecommit (op voorwaarde natuurlijk dat transactions ondersteund worden).

Eternity00

Legacy Member
taLa. zei:
Als ge met MyISAM werkt gaat ge nog lang kunnen proberen; die ondersteunt namelijk helemaal geen transactions.
[...]
Dan zou autocommit zelfs geen invloed mogen hebben, want statements binnen een expliciet gestarte transactie worden nooit automatisch gecommit.
Dat MyISAM geen transacties ondersteunt wist ik niet, heb weer iets bijgeleerd :niceone:
en bij de rest vd quote had ik zelfs nog ni bij stilgestaan..en dat als DBA... :sad:
RpR zei:
Ook op delete queries.

Zoals reeds gezegd zal hij bij een select gewoon direct uitvoeren.

just ja, deletes ook.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan