000001 stílusú sorszám növelése
A kérdés a következő
ilyen sorszámot kell csinálnom és növekedjen
000001
adatbázisba így tároljam, vagy legyen inkább autoincrement és php-ban a nullákkal játszok
■ ilyen sorszámot kell csinálnom és növekedjen
000001
adatbázisba így tároljam, vagy legyen inkább autoincrement és php-ban a nullákkal játszok
Auto increment
sorry
a lényeg hogy visszakeresésnél ezt a számot üti be 0000001
bár a nullákat ki lehet trimmelni
Nem zárja ki egymást.
Balázs
szuper
a sorszámok iy ugy nőnek hogy "tizes válltás" után a nulla 1-re vállt
nem lesz hézagmentes
Ettől függetlenül szerintem a DB-ben nem kell benne legyen a nulla, az egy dolog, hogy a user így akarja beütni, de ettől még nem kell így is tárolni.
Üdv,
Felhő
akkor megnyugodtam
sima autoincrement a nullákat sprintf("%07d",$sorszam);
a sorszámoknak egymás után kell nőni,ne legyen hézag. tranzakció kezelésnél egy esetleges rollback miatt nem lessz hézag?
próbáld ki ;)
Felhő
hűlyeséget kérdeztem elnézést
biztos vagy benne?
Üdv,
Felhő
Igen
akkor mi legyen?
Akkor szerintettek mi legyen. vegyem ki az auto incrementet, és programból vagy triggerből vagy tárolt eljárásból növeljem a sorszámot?
max+1
Üdv,
Felhő
trigger nincs több
találkoztatok-e már olyan hibával mysql hogy engedi a triggert hozzáadni.De mikor megnézném pl(EMS mysql) azt mondja hogy törölve lett ill nem találja a triggert
Bővebben
Szerintem a nagy kérdés az, hogy ezt a kulcsot használod-e kapcsolatok építésére más táblákkal, mert ha igen, akkor mindenképpen a lyukas megoldás a biztonságosabb:
Tételezzük fel, hogy van egy rekordod ebben a sorszámozott táblában, ehhez kapcsolódik egy rekord egy másikban. Valamilyen hiba folytán törlődik a sorszámozott rekordod. Ha max+1 -et hazsnálsz, akkor a mostani rekord helyére kerül az új, és a régi rekord kapcsolatai így már az újra fognak mutatni (mivel újra kiosztottad az ID-t). Auto incrementnél nyilvánvaló lesz a hiba, hiszen a kapcsolatok egy nem létező rekordra mutatnak. (Nem tudom mennyire volt érthető)...
Foreign Key
Én tesztelgetek
`szerzodesID` int(11) NOT NULL auto_increment,
`kod_elso` int(2) NOT NULL,
`projektID` int(11) NOT NULL,
`szerzodoID` int(11) NOT NULL,
`partnerID` int(11) NOT NULL,
`sorszam` varchar(20) default NULL,
`statusz` varchar(20) NOT NULL default 'üres',
`osszdij` int(7) NOT NULL default '0',
`letrehozo` varchar(20) default NULL,
`ugynokID` int(11) NOT NULL,
`letrehozas` timestamp NOT NULL default CURRENT_TIMESTAMP,
`modosito` varchar(20) default NULL,
`modositas` datetime default NULL,
PRIMARY KEY (`szerzodesID`,`partnerID`),
KEY `szerzodesID` (`szerzodesID`),
KEY `ugyfelID` (`szerzodoID`),
KEY `partnerID` (`partnerID`),
KEY `ugynokID` (`ugynokID`),
CONSTRAINT `szerzodes_fk` FOREIGN KEY (`partnerID`) REFERENCES `partner` (`partnerID`) ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
a szomorú helyzet az hogy a szerzodesID használom az utolsó számjegyekhez sprintf('%07d',szerzodesID) = 0000001
remélem jól írtam. a sorszám oszlop tartalma = 80010010000001.
hogy világos legyen, a sorszám = kod_elso+partnerID+projektID+szerzodesID
használ tranzakciót
elég kicsi a sorszám intervallum, 7 számjeg