legen van de database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Renew

renew

27/08/2007 16:35:00
Quote Anchor link
Hoi, m.b.v. phpMyAdmin heb ik een database gebouwd. Die heb ik ook getest met onzin data. Maar er staat ook zinnige data in de tabellen. Nu wil ik graag alleen de onzin data kwijt, maar hoe doe ik dat?

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. ???
 
PHP hulp

PHP hulp

24/11/2024 06:08:44
 
Martijn B

Martijn B

27/08/2007 16:42:00
Quote Anchor link
Het lijkt mij makkelijker dan je de data + structuur even exporteert.
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.
 
Frank -

Frank -

27/08/2007 16:45:00
Quote Anchor link
Quote:
Als ik nu rijen verwijder dan verdwijnt ook het desbetreffende id permanent en dat is niet de bedoeling.
Lijkt mij logisch, je gooit de data tenslotte weg.
Quote:
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.
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 '').

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.
 
Arjan Kapteijn

Arjan Kapteijn

27/08/2007 16:45:00
Quote Anchor link
TRUNCATE TABLE
 
Martijn B

Martijn B

27/08/2007 16:51:00
Quote Anchor link
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
 
Frank -

Frank -

27/08/2007 16:57:00
Quote Anchor link
@Martijn: Waarom lopen kloten met id's wanneer je vele miljarden id's tot je beschikking hebt? Waarom zou je daar risico's mee willen lopen? Ik zou het niet weten...

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.
 
Klaasjan Boven

Klaasjan Boven

27/08/2007 16:59:00
Quote Anchor link
Zelfs in een tabel zonder relaties heeft Frank gewoon gelijk. Het id is niets noppes nada en daar ken je geen waarde aan teo. zie het zo:
- je kan zoveel velden maken als je wilt maar blijf van deze af, die is van de DB

Edit:

Frank was sneller
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Martijn B

Martijn B

27/08/2007 17:38:00
Quote Anchor link
Uiteraard hebben jullie gelijk.

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
 
Renew

renew

27/08/2007 22:16:00
Quote Anchor link
Hallo, fijn dat jullie meedenken, ik ben wel beginner hoor, maar ik doe mijn best.

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?
 
Frank -

Frank -

27/08/2007 22:20:00
Quote Anchor link
Quote:
en daarna de id kolom weer netjes oplopend hebben.
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.

Blijf hier in vredesnaam met je vingers van af. Het levert niks op, id heeft namelijk geen betekenis, en kan alleen maar problemen opleveren.
 
Jaws

Jaws

27/08/2007 22:34:00
Quote Anchor link
Gezien Renew gezegd heeft dat het hier maar een kleine tabel betreft denk ik dat het met die problemen wel reuze mee zal vallen in zijn geval. En als je twijfelt maak je toch gewoon eerst even een backup.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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 ;
?>


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.
 
Frank -

Frank -

27/08/2007 22:41:00
Quote Anchor link
En wat heb je dan bereikt? Niks. Het id heeft namelijk geen waarde, 1 of 473947 is exact hetzelfde: een uniek record.

Kan het niet vaak genoeg roepen, maar hou er nu toch maar over op.
 
Klaasjan Boven

Klaasjan Boven

27/08/2007 22:44:00
Quote Anchor link
Waarom wil je nou in vredesnaam zelf eigenhandig aan het id zitten. Blijf daar nou vanaf, er is GEEN enkele reden om die zogenaamd "weer netjes op volgorde"te krijgen.
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 :)
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
TJVB tvb

TJVB tvb

27/08/2007 22:49:00
Quote Anchor link
Je kunt jezelf beter aanleren om je HELEMAAL niks van die id aan te trekken. Hij bestaat, is uniek en dat is genoeg. Desnoods laat je hem bij 156516056 beginnen.
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
 
Renew

renew

27/08/2007 23:06:00
Quote Anchor link
Hm ok zoals ik het hier lees is er helemaal niets aan de hand. Ik wis gewoon alles wat onzin data was en wat al goed ingevoerd was laat ik gewoon staan.

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.
 
Jaws

Jaws

27/08/2007 23:12:00
Quote Anchor link
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.
 
Jan Koehoorn

Jan Koehoorn

27/08/2007 23:22:00
Quote Anchor link
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.
 
Jaws

Jaws

28/08/2007 00:06:00
Quote Anchor link
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.
 
Frank -

Frank -

28/08/2007 01:57:00
Quote Anchor link
@Jaws: Wanneer er geen enkele relatie is met andere tabellen, dan zou je best de auto_increment op 0 kunnen zetten. Maar waarom zou je dat doen? Het kost alleen tijd en je leert jezelf dingen aan die eigenlijk alleen maar goed fout kunnen gaan. Je moet er niet aan denken dat je later een (gedeelte van) een backup terug moet zetten.

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.
 
Jelmer -

Jelmer -

28/08/2007 09:24:00
Quote Anchor link
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.


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...
 
Jaws

Jaws

28/08/2007 23:23:00
Quote Anchor link
Klopt Jelmer.

@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! :)
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.