Opettelen SQL:ää ja mulla on taulu, jossa on kenttiä ja niiden tyypit tiedossa. Nyt haluaisin kokeiluvaiheessa tyhjentää taulun kaikesta kokeiludatasta. Onko tähän muuta vaihtoehtoa kuin dropata taulu ja luoda uusi? Jos ei ole, niin saanko SQL:ssä selville taulun kenttien tietotyypit, avaimet ja not nullit?
DELETE FROM taulu
ilman ehtoja, oliko vaikea arvata? :)
Edit: AUTO_INCREMENT ei toki nollaudu tästä, mutta eihän id:llä sinänsä ole väliä.
Ahaa. Enpäs hoksannut koettaa tuota.
Ainakin pSQL:ssä toimii myös DELETEä nopeampi TRUNCATE <taulu>. Ei taida tosin kuulua standardi SQL:ään.
TRUNCATE-komento ainakin nollaa AUTO_INCREMENT-arvot.
Joo, TRUNCATE on parempi ratkaisu, mutta DELETE ilman ehtoja on temppu, jonka kuka tahansa voisi keksiä ominkin neuvoin.
Eikä sen droppaamisenkaan mahdottoman vaikeaa pitäisi olla. Et kai sentään ole käsin kirjoittanut luontikyselyitä? Kannattaisi laittaa ne tiedostoon (tai tehdä koko työ jollain työkalulla kuten MySQL Workbenchilla).
Sainkin halutun lopputuloksen update-käskyllä sijoittamalla nullit kyseiseen kenttään, kun deleteen ei näköjään voikaan laittaa kenttäkohtaista poistoa.
Metabolix kirjoitti:
Et kai sentään ole käsin kirjoittanut luontikyselyitä? Kannattaisi laittaa ne tiedostoon (tai tehdä koko työ jollain työkalulla kuten MySQL Workbenchilla).
En tehnyt käsin. Mietin joitakin tiedostosysteemejä, mutta siinä pitäisi parsia Excel-tiedostosta kenttien nimet ja tyypit. Onnistuin käyttämään erästä skriptiä, joka vaatii vähän manuaalista säätöä jälkikäteen, mutta ratkaisu osoittautui toimivaksi.
NULL yksittäisen sarakkeen arvona on aivan eri asia kuin poistaminen. NULL on aivan kelvollinen arvo muiden joukossa.
Jotenkin kuulostaa tietokannan väärinkäytöltä (paitsi joissain erikoistapauksissa), että olisi joukko valmiita rivejä, joita sitten vain muokkaillaan. Mutta omapa on softasi.
Väärinkäyttöä tai ei, mutta mun piti lisätä tietokantaan eräs sarake ja laskea siihen arvoja muista kentistä. Tein bugin, jolloin tuohon ekstrakenttään tuli väärä satunnainen arvo useaan kohtaan, sillä päivitys tapahtui luupissa. Ajattelin ensin, että saan deleten avulla poistettua vain ekstrakentän, jolloin voin tehdä uuden tyhjän kentän, mutta update osoittautuikin miettimisen jälkeen toimivaksi ratkaisuksi.
Miksi se sitten piti nollata, mikset vain laskenut tilalle uusia arvoja silmukassa, kuten ensimmäiselläkin kerralla? Ei aina tarvitse tehdä asioita mahdollisimman mutkikkaasti. :)
Aivot tuntui olevan solmussa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.