mysql> create table test (id int auto_increment, primary key (id));
Query OK, 0 rows affected (0.01 sec)
mysql> select * from test;
Empty set (0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test () values ();
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test () values ();
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+
| id |
+----+
| 2 |
+----+
1 row in set (0.00 sec)
mysql>
Tanulság: RTFM, és az APEH-nek nem sequnece-kel kell számlaszámot generálni.
- saxus blogja
- A hozzászóláshoz be kell jelentkezni
- 1519 megtekintés
Hozzászólások
Megsasoltam volna mi az a muhportál de sehogy semkarta megnyitni....
Állatbarátokat keresek http://hup.hu/node/66090
- A hozzászóláshoz be kell jelentkezni
MySQL, de az már inkább annak a példája, hogy hogyan ne írjunk CMS-t. Lehet, hogy egyszer újraírom normálisan a mostani céges keretrendszerrel, mert ég és föld lenne a különbség, csak munka és suli mellett viszonylag kevés időm van, amit ilyenekre szeretnék fordítani. Gyk. évek óta nem volt időm érdemben hozzányúlni, max pár apróbb hibajavítás, de volna még mit javítani rajta.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
Én az auto_increment-et a belső_id-hez használom, a számlaszám sima +1, ami nem véletlen, mert egy táblában van minden számla fejléce.
...
- Átutalásos számla
- Készpénzes számla
- EU Export utalás
- EU Export kp
...
Mindegyik más betűvel kezdődik, így a könyvelés is elélvez, mert egyből látszik a számlán mit és hová kell tenni.
- A hozzászóláshoz be kell jelentkezni
Így van.
Eszem ágába se jutott volna auto_increment alapján számlaszámot generálni...
1xüen letárolom a kezdő értéket és számla záráskor előveszem. az lesz a számlaszám majd +1 és eltárolom (ha nem jött közbe semmi...)
pch
--
http://www.buster.hu
--
- A hozzászóláshoz be kell jelentkezni
Amúgy SQL sor törlés akkor folytatja ahol abbahagyta az autoincrement, ha viszont tábla ürítés van kezdi elölről a számolást.
ps.: én is így csinálom.
- A hozzászóláshoz be kell jelentkezni
es hogy oldod meg a +1 szamolasat?
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
CREATE TABLE public.szamlaseq (szamlaid INT NOT NULL DEFAULT 0);
Lekérdezés:
BEGIN;
UPDATE szamlaseq SET szamlaid = szamlaid + 1 RETURNING szamlaid;
-- Számla beszúrása ide.
ROLLBACK/COMMIT;
Persze, ehhez az is kell, hogy a tranzakció READ COMMITTED módban fusson (PostgreSQL-ben, MySQL-ben ez a default). Ilyenkor párhuzamos tranzakciók esetén a második tranzakció bevárja az előbb indított tranzakció végét. Ha az első tranzakció sikeresen lefut, akkor a növelt szamlaid lesz a szamlaseq táblában, ha rollbackelve lett, akkor az eredeti.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
ohm, ezt gondold ujra, mert igy baromsag. miaz, hogy bevarja a tranzakcio a masikat?? :) dehogy varja be.
a READ COMMITTED annyit tesz, hogy ha lekerdezel a tablabol, akkor csak commitolt tranzakciok eredmenyeit latod rajta, azokat, amik epp csak ugy leteznek (azaz nem commitoltak, se nem rollbackeltek) nem.
a bevarashoz semmi koze.
- A hozzászóláshoz be kell jelentkezni
Várjál, tényleg átgondolom még egyszer, mert ez tényleg a másikra hajaz.
Ettől függetlenül miért van az, hogyha indítok két sessiont, mindkettőben indítok egy-egy tranzakciót, meg egy updatet, a később indított update addig nem fut le, míg az előzőt nem commitolom/rollbackelem?
Mind postgresql, mind mysql így működik default.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
Falcon enginerol irnak, de InnoDB ugyanez:
The Falcon engine defaults to the repeatable read isolation mode level with no phantoms being possible. When a transaction attempts to modify or delete a row that another in-process transaction has already obtained, the previous transaction will wait until the other transaction either commits or rolls back. If the first transaction commits, then the other transaction receives an error and must try again. However, if the first transaction rolls back, then the other transaction will succeed. It’s important to note that all transactions will always read and operate on consistent data, which mirrors how many proprietary databases like Oracle operate.
itt.
amugy attol fugg, hogy mit updatelsz. row level lockingnal nincs ilyen problema, szerintem, csak ha ugyanazokat az adatokat erintene a ket update. ez pedig pont azert van, h konzisztens maradjon, marmint, mikor belepsz a tranzakcioba, kozben ne valtozzon az, amin dolgoznal.
- A hozzászóláshoz be kell jelentkezni
"csak ha ugyanazokat az adatokat erintene a ket update."
Az általam írt példánál egész táblában volt egyetlen egy rekord.
"kozben ne valtozzon az, amin dolgoznal."
Ez lenne a cél, meg is teszi.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
nem teszi, hiszen a "bevarast" tapasztalod, nemde?
szerk: kozben rajottem, hogy ekezettel irsz, igy az a meg is teszi az nem "még is teszi" :)
- A hozzászóláshoz be kell jelentkezni
REPEATABLE READ a default. select @@tx_isolation. Ez igy nagyon ronda, es nem garantal neked kb. semmit. Sokkal szebb egy kulon szekvencia tablat csinalni, es irni egy olyan stored functiont, amit bele tudsz mar irni direkt az SQL-jeidbe.
- A hozzászóláshoz be kell jelentkezni
Az biztos hogy elélvez, mert a számlákat folyamatosan kell sorszámozni. ha a számla más betűvel kezdődik, akkor az egy másik "számlatömb", aminél szintén kell lennie axxx1 .. axxx9 ill. bxxx1 .. bxxx9 és így tovább. az hogy axxx1 bxxx2 axxx3 axxx4 bxxx5 nem elfogadható.
Kíváncsi lennék arra a szigorú bizonylatok nyilvántartásra:)) ha van egyáltalán:Đ
Legalábbis én így tanultam még vagy 20 éve.
Való igaz, nem igazán foglalkoztam vele azóta:)
- A hozzászóláshoz be kell jelentkezni
Ő kérte, amikor megindult a saját fejlesztés.
A-2009/000001
Z-YEAR/999999
A kezdőbetűk csak a tranzakció típusára utalnak, ami a számlán is szerepel szövegesen.
- A hozzászóláshoz be kell jelentkezni
Így igaz.
Nekem pl.: számla KS/YEAR/sorszám
szállító KL/YEAR/sorszám
ehhez meg ugye a sorszám tömbbe 2 bejegyzés tartozik.
Függetlenül attól melyik telephelyen készül a számla.
De ugyanúgy szigorú számadás alá kerül a bevételi/kiadási pénztárbizonylat is.
pch
--
http://www.buster.hu
--
- A hozzászóláshoz be kell jelentkezni