legen van de database
Alle tabellen beginnen met een id dat automatisch per rij met 1 wordt opgehoogd.
Als ik nu rijen verwijder dan verdwijnt ook het desbetreffende id permanent en dat is niet de bedoeling.
Als ik een rij handmatig wis, dus een rij selecteer, open en leegmaak. Dan komt alles op '0' te staan. Als ik later weer items toe ga voegen wordt deze rij niet opnieuw gevuld maar overgeslagen.
Vraag: Hoe wis ik bepaalde gevulde rijen zonder dat de automatische telling van de id's mbv de autoincrement teniet wordt gedaan. ???
Nu heb je een SQL bestand met alle record erin, je kunt nu makkelijk handmatig de records verwijderen.
Bij het exporteren kun je denk ik wel aangeven of de id (auto_increment) kolom ook moet worden gevuld. Anders moet je nog alle ID,s van alle record handmatig gaan aanpassen.
Quote:
Lijkt mij logisch, je gooit de data tenslotte weg.Als ik nu rijen verwijder dan verdwijnt ook het desbetreffende id permanent en dat is niet de bedoeling.
Quote:
Overgeslagen? Er wordt helemaal niks overgeslagen, er valt niks over te slaan, je maakt gewoon een nieuw record aan. Dat is wat anders dan een UPDATE waarbij je data overschrijft met een lege waarde (NULL of ''). Als ik een rij handmatig wis, dus een rij selecteer, open en leegmaak. Dan komt alles op '0' te staan. Als ik later weer items toe ga voegen wordt deze rij niet opnieuw gevuld maar overgeslagen.
Mijn gevoel: Jij hebt geen idee wat een id is (een middel om een uniek record te herkennen) en kent hier een waarde aan toe die het helemaal niet heeft. Een id betekent helemaal niets! Ga er dan ook geen waarde aan toekennen!
Blijf met je vingers van de auto_increment af en ga nooit lopen klooien met id's. Deze worden uitsluitend door de database gebruikt om unieke records te herkennen. Wanneer jij hiermee gaat lopen klooien, loop je een grote kans op een corrupte database.
TRUNCATE TABLE
Quote:
Blijf met je vingers van de auto_increment af en ga nooit lopen klooien met id's. Deze worden uitsluitend door de database gebruikt om unieke records te herkennen. Wanneer jij hiermee gaat lopen klooien, loop je een grote kans op een corrupte database.
Ik denk dat renew een tabel heeft zonder ralaties. Anders had renew dit wel aangegeven, lijkt mij.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
Wanneer je klaar bent met testen en de boel live wilt gaan zetten, dan is het aan te raden om een complete schone installatie van de database te doen. Dan weet je zeker dat je nergens wat bent vergeten op te ruimen.
- je kan zoveel velden maken als je wilt maar blijf van deze af, die is van de DB
Edit:
Frank was sneller
Frank was sneller
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
renew wil wat records verwijderen en daarna de id kolom weer netjes oplopend hebben.
Als ik weet dat een tabel geen relaties heeft en er zijn niet al te veel records (100+) dan zou ik gewoon de tabel exporteren (zonder ID waardes) en daarna het bestand aanpassen. Even de tabel legen (TRUNCATE) en je kunt alles weer importeren.
Het is niet de mooiste oplossing maar werkt wel.
Quote:
Wanneer je klaar bent met testen en de boel live wilt gaan zetten, dan is het aan te raden om een complete schone installatie van de database te doen. Dan weet je zeker dat je nergens wat bent vergeten op te ruimen.
Het lijkt mij dat renew geen bestand heeft met de goede records.
Anders had renew dat wel gedaan, lijkt mij.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
Ik wil idd zoals Marijn zegt dat ik graag wil dat het netjes oploopt. Ik weet dat auto-increment zelf telt, daar doe ik niets aan. Het is wel een relationele database. Ik heb me eens laten vertellen dat je eigenlijk nooit moet deleten. Ik heb nu bijvoorbeeld een tabel klant en het klant_id telt van 1 tot 4 en dan gaat ie verder bij 8 dat vind ik niet mooi. Is daar niets meer aan te doen?
Ik heb nog nooit een database geexporteert, ik zal me daar meer in verdiepen. Ook m.b.t. het nog veranderen van dingen. Tot nu toe heb ik ook alleen lokaal gewerkt, maar een dezer dagen moet hij geupload worden. Dan moet ik ook exporteren daar was ik nog niet aan toe gekomen.
Het is meer zo gegaan dat ik hem goed heb gevuld en daarna ben gaan testen. Ik begrijp uit bovenstaande dat ik dit alles niet moet bewaren maar beter de volgende keer eerst alles met onzin data kan uittesten en daarna goed vullen en dan online zette. Het is geen omvangrijke database, misschien is het handigst om een tabel te legen ??? en dan opnieuw in te vullen?
Quote:
Wat is oplopend? Het id moet uniek zijn en niet meer dan dat! Ga er geen betekenis aan kennen, id 2 is niet belangrijker, ouder, of groter dan id 3! Vergeet iedere wiskundige betekenis van het getal, het is UITSLUITEND bedoelt om unieke records te genereren.en daarna de id kolom weer netjes oplopend hebben.
Blijf hier in vredesnaam met je vingers van af. Het levert niks op, id heeft namelijk geen betekenis, en kan alleen maar problemen opleveren.
Het resetten kan idd zoals Martijn aangeeft.
Als je je tabel doet exporteren via PHPmyAdmin krijg je een dump die hierzo op lijkt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
--
-- Tabel structuur voor tabel `jouwtabel`
--
CREATE TABLE `klant` (
`id` int(11) NOT NULL auto_increment,
`voornaam` varchar(45) NOT NULL default '',
`achternaam` varchar(45) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;
?>
--
-- Tabel structuur voor tabel `jouwtabel`
--
CREATE TABLE `klant` (
`id` int(11) NOT NULL auto_increment,
`voornaam` varchar(45) NOT NULL default '',
`achternaam` varchar(45) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;
?>
Copy-paste deze text in een text bestandje (rename even naar .sql) en pas dan het stukje aan waar staat: "AUTO_INCREMENT=", en zorg dat die op 0 staat. Sla hem op. Verwijdere de oude tabel, en importeer een nieuwe aan de hand van het net opgeslagen bestandje. Zo kan het in iedergeval.
Kan het niet vaak genoeg roepen, maar hou er nu toch maar over op.
Het id is van de database zelf, afblijven
Echt jullie hebben geen idee wat het id doet. Nou heb je een ongekoppelde tabel maar de volgende keer is ie gekoppeld en als je dan aan het id zit help je integriteit volledig overhoop
NIET AANZITTEN
Edit:
F*Ck Frank is weer sneller :)
F*Ck Frank is weer sneller :)
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
Als je een mooi opeenlopend getal wilt hebben maak je daar een nieuwe kolom voor en daarin sorteer je het dan leuk.
Maar wen nu met het aanpassen van de id's en je krijgt later grote (zo niet gigantische) problemen.
edit:
Beetje traag vanavond
Gewijzigd op 01/01/1970 01:00:00 door TJVB tvb
De id 's van de bestellingen lopen ook niet op, weet niet hoe het komt. Maar schijnt niet erg te zijn want gaat om authenticiteit zoals ik hier begrijp.
Ja, je kunt er BETER niet aan zitten nee. Maar dit is een geval waar je nog een systeem aan het opbouwen bent, niet een already running system. Als iemand er dan op kikt op zijn eerst ingevoerde klant of voor mij part eerst geposte nieuwsbericht te tonen met als link: klant.php?id=1 ipv. klant.php?id=156516056 dan kan ik daar nog best een beetje in komen ook. Als later klant met id =1 verwijderd wordt tja, dan ben je hem alsnog kwijt. Maar kun je hem ook weer opnieuw invoeren als andere klant.
Dat is nu juist wat je NIET moet doen. Als een record uit je database is, ga je niet dat id aan een andere record toekennen. Dan is je integriteit weg.
Ik wil trouwens niet zeggen dat het verstandig is om id's te gaan hergebruiken, absoluut niet, en zeker niet in grote relationele databases.
En vergeet niet de hamvraag: Wat levert het op?
Antwoord: Niks, helemaal niks, nul, noppes, nada. Hoewel, het verhoogt het risico op zeer grote problemen. Maar wie zit daar op te wachten?
Kortom, blijf met je @#$%^& vingers van de auto_increment af! Die is van de database, daar heb jij van af te blijven.
Jaws schreef op 28.08.2007 00:06:
Stel je hebt een platte tabel met een paar records zonder relaties. Welke integriteit gaat er dan verloren? Misschien mis ik iets?
Ik wil trouwens niet zeggen dat het verstandig is om id's te gaan hergebruiken, absoluut niet, en zeker niet in grote relationele databases.
Ik wil trouwens niet zeggen dat het verstandig is om id's te gaan hergebruiken, absoluut niet, en zeker niet in grote relationele databases.
Stel, jij hebt een website met een artikel over schapen onder ID 4, en jij gebruikt links op de manier die jij hierboven gaf. Google indexeert die pagina, en verbindt die link met ID 4 dus aan 'schapen'. Nu wis je dat artikel over schapen en zet er iets over lamsbouten op zijn plek. Iedereen die verwees naar dat artikel over schapen krijgt nu plotseling dat artikel over lamsbouten te zien.
Had je nu je ID niet hergebruikt, dan had je nog even netjes kunnen melden dat de pagina waar naar gezocht werd niet kon worden gevonden, en de bezoeker kunnen wijzen op de zoekfunctie van de site bijvoorbeeld.
Ik bedoel maar even, je eigen database is niet de enige database waar je relaties in kan opbouwen...
@Frank: Ik blijf er bij, dat wanneer ik een systeempje heb gemaakt met een relationele database, en vervolgens de tabel structuur van dat systeem exporteer (via bijv. PHPMyadmin) en weer ergens online importeer met een autoincrement=0, dit absoluut geen probleem geeft wanneer de database leeg is. Ik heb het zelf tientalle keren gedaan zonder probs. Ik zie het eigenlijk meer zo: wanneer ik klaar ben met testen van een systeem dan lever ik het op tellende bij 0, net zoals je een auto ook koopt met een km-teller die bij 0 begint.
Dus let op, ik heb het dus over een nieuw systeem, met LEGE tabellen! Zoals een nieuwe auto die nog GEEN km's gereden heeft! :)