SQLite Lag, endre, slipp tabell med eksempler

⚡ Smart oppsummering

SQLite Tabelladministrasjon er avhengig av tre datadefinisjonskommandoer: CREATE TABLE for å definere en tabell, ALTER TABLE for å gi den nytt navn eller legge til og endre kolonner, og DROP TABLE for å fjerne den fullstendig fra databasen.

  • 📐 Lag tabeller: CREATE TABLE-setningen definerer et tabellnavn og dets kolonner, og hver kolonne trenger et navn og en datatype.
  • 🛡️ Unngå feil: Å legge til IF NOT EXISTS i CREATE TABLE, eller IF EXISTS i DROP TABLE, forhindrer feil når en tabell allerede finnes eller mangler.
  • ✏️ Endre tabeller: ALTER TABLE gir nytt navn til en tabell, legger til en kolonne, og i moderne SQLite endrer navn på eller fjerner en enkelt kolonne.
  • 🗑️ Dropp tabeller: DROP TABLE-kommandoen fjerner en tabell og alle rader og indekser som tilhører den permanent.
  • 📑 Kopier tabeller: CREATE TABLE AS SELECT bygger en ny tabell fra kolonnene og radene som returneres av en spørring.
  • 🤖 AI-hjelp: AI-tekst-til-SQL-assistenter og GitHub Copilot genererer CREATE-, ALTER- og DROP-setninger fra enkle engelske ledetekster.

SQLite Opprett endring av dropp-tabell

Avsnittene nedenfor viser hvordan du oppretter tabeller, endrer strukturen deres og slipper tabeller i SQLite3 med eksempler, som dekker kommandoene CREATE TABLE, ALTER TABLE og DROP TABLE.

SQLite Opprett tabell

syntax

Nedenfor er syntaksen til CREATE TABLE-setningen.

CREATE TABLE table_name(
column1 datatype,
column1 datatype
);

For å opprette en tabell, bør du bruke «CREATE TABLE»-spørringen som følger:

CREATE TABLE guru99 (
  Id Int,
  Name Varchar
);

Innenfor de to parentesene etter tabellnavnet definerer du tabellenes kolonner, hver kolonne skal ha følgende egenskaper:

  • Et navn, kolonnenavnet det skal være unikt blant tabellens kolonner.
  • En datatype – kolonnedatatypen.
  • Valgfrie kolonnebegrensninger som vi vil forklare i de senere avsnittene i denne veiledningen.

SQLite OPPRETT TABELL HVIS DEN IKKE FINNES

Når et skript kjøres mer enn én gang, mislykkes en vanlig CREATE TABLE-setning hvis tabellen allerede finnes og stopper med en feil. SQLite løser dette med den valgfrie IF NOT EXISTS-klausulen, som bare oppretter tabellen når den mangler og ikke gjør noe når den allerede er der.

CREATE TABLE IF NOT EXISTS guru99 (
  Id Int,
  Name Varchar
);

Utsagnet ovenfor gir aldri feilen «tabellen finnes allerede», noe som gjør det trygt å oppbevare den øverst i et oppsett- eller migreringsskript.

Den samme ideen fungerer i motsatt rekkefølge når du fjerner en tabell. Å legge til IF EXISTS til DROP TABLE unngår en feil når tabellen allerede er borte:

DROP TABLE IF EXISTS guru99;

Begge klausulene er vanlige i automatiserte skript, fordi de lar den samme filen kjøre gjentatte ganger uten manuell opprydding mellom kjøringene.

Slippbord

For å slette en tabell, bruk kommandoen «DROP TABLE» etterfulgt av tabellnavnet som følger:

DROP TABLE guru99;

Endre bord

Du kan bruke kommandoen «ALTER TABLE» for å gi nytt navn til en tabell på følgende måte:

ALTER TABLE guru99 RENAME TO guru100;

For å bekrefte at tabellens navn er endret, kan du bruke kommandoen «.tables» for å vise listen over tabeller, og tabellnavnet skal nå endres som følger:

SQLite .tables-utdata som viser tabellen omdøpt fra guru99 til guru100

Som du kan se, er tabellnavnet «guru99» endret til «guru100» etter kommandoen «alter table».

SQLite legg til kolonner - Bruk ALTER TABLE-kommandoen

Du kan også bruke kommandoen «ALTER TABLE» for å legge til kolonner:

ALTER TABLE guru100 ADD COLUMN Age INT;

Dette vil endre tabellen «guru100» og legge til en ny kolonne for alder.

Hvis du ikke så noen utdata, betyr dette at setningen var vellykket, og kolonnen ble lagt til. Ingen utdata betyr at markøren vil bli plassert etter «sqlite>» uten tekst etter den, slik som dette:

SQLite Kommandolinjen viser ingen utdata etter en vellykket ALTER TABLE ADD COLUMN

For å bekrefte at kolonnen ble lagt til, kan vi imidlertid bruke kommandoen «.schema guru100». Dette vil gi deg tabelldefinisjonen, og du bør se den nye kolonnen vi nettopp har lagt til:

SQLite .schema guru100-utdata som viser den nye alderskolonnen som er lagt til i tabellen

SQLite ENDRE TABELL: Gi nytt navn til og slett en kolonne

Utover å legge til en kolonne, moderne versjoner av SQLite kan også gi nytt navn til en enkelt kolonne og fjerne én. Å gi nytt navn til en kolonne har vært mulig siden SQLite 3.25, og den oppdaterer navnet i tabelldefinisjonen samt i alle indekser, utløsere og visninger som refererer til kolonnen.

ALTER TABLE guru100 RENAME COLUMN Name TO FullName;

For å fjerne en kolonne, SQLite 3.35 og senere støtter en direkte DROP COLUMN-klausul:

ALTER TABLE guru100 DROP COLUMN Age;

En kolonne kan ikke slettes når den er en del av en primærnøkkel, en unik begrensning eller en indeks. På eldre SQLite versjoner som mangler SLIP KOLONNE, er den klassiske løsningen å opprette en ny tabell med kolonnene du ønsker, kopiere radene over, slette den gamle tabellen og til slutt gi den nye nytt navn.

Slik kopierer du en tabell i SQLite Bruk av CREATE TABLE AS SELECT

Noen ganger trenger du en kopi av en tabell, enten som en sikkerhetskopi før en risikabel endring eller som utgangspunkt for en ny tabell. SQLite bygger dette i ett trinn med CREATE TABLE AS SELECT, som oppretter en ny tabell der kolonnene kommer fra en spørring og fyller den med radene som spørringen returnerer.

CREATE TABLE guru100_backup AS SELECT * FROM guru100;

Den nye tabellen «guru100_backup» mottar de samme kolonnene og hver rad fra «guru100». For å kopiere bare noen rader, legg til en WHERE-klausul i SELECT-en:

CREATE TABLE known_ages AS SELECT * FROM guru100 WHERE Age IS NOT NULL;

Et poeng å huske på er at CREATE TABLE AS SELECT kopierer kolonnenavnene, typene og dataene, men den kopierer ikke primærnøkler, andre begrensninger eller indekser. Du må legge disse til i den nye tabellen selv hvis kopien må håndheve de samme reglene som originalen.

SQLite Sett inn verdi i en tabell

For å sette inn verdier i en tabell bruker vi «INSERT INTO»-setningen som følger:

INSERT INTO Tablename(colname1, colname2, ….) VALUES(valu1, value2, ….);

Du kan utelate kolonnenavnene etter tabellnavnet og skrive det som følger:

INSERT INTO Tablename VALUES(value1, value2, ….);

I slike tilfeller, der du utelater kolonnenavnene fra tabellene, må antallet innsatte verdier være det samme nøyaktige antallet av tabellens kolonner. Deretter vil hver verdi settes inn i korrespondansekolonnen. For eksempel for følgende innsettingssetning:

INSERT INTO guru100 VALUES(1, 'Mike', 25);

Resultatet av denne uttalelsen vil være som følger:

SQLite INSERT INTO-setning legger til en rad med verdier i guru100-tabellen

  • Verdien 1 vil bli satt inn i kolonnen «id».
  • Verdien «Mike» vil bli satt inn i kolonnen «Navn», og
  • Verdien 25 vil bli satt inn i kolonnen «Alder».

INSERT ... DEFAULT VALUES-setning

Du kan fylle ut tabellen med standardverdiene for kolonnene samtidig som følger:

INSERT INTO Tablename DEFAULT VALUES;

Hvis en kolonne ikke tillater en nullverdi eller en standardverdi, vil du få en feilmelding om at «IKKE NULL-begrensning mislyktes» for den kolonnen. Som følger:

SQLite Feil ved feilen «IKKE NULL»-begrensning fra INSERT DEFAULT VALUES

Spørsmål og svar

Nei. SQLite har ingen TRUNCATE TABLE-kommando. For å tømme en tabell, kjør DELETE FROM tabellnavn uten en WHERE-klausul, og bruk deretter VACUUM for å gjenvinne den frigjorte diskplassen. Tabellstrukturen og kolonnene forblir på plass.

DELETE fjerner rader fra en tabell, men holder tabellen, kolonnene og strukturen klar for nye data. DROP TABLE fjerner hele tabellen, inkludert definisjon, indekser og utløsere, slik at tabellen ikke lenger finnes i databasen.

På SQLite kommandolinjen, .tables dot-kommandoen skriver ut hvert tabellnavn. Fra SQL, spør den innebygde skjematabellen med SELECT name FROM sqlite_master WHERE type = 'table'; som også fungerer fra alle applikasjoner som er koblet til databasen.

En midlertidig tabell opprettes med CREATE TEMP TABLE eller CREATE TEMPORARY TABLE. Den er bare synlig for databasetilkoblingen som opprettet den, og slettes automatisk når tilkoblingen lukkes, noe som gjør den nyttig for å oppbevare mellomliggende spørreresultater.

Ja. En primærnøkkel er valgfri i SQLiteNår du utelater én, SQLite beholder fortsatt en skjult 64-bits rad-ID som identifiserer hver rad. Kolonnebegrensninger som PRIMÆRKØKKEL, UNIK og IKKE NULL er alle valgfrie når du definerer en tabell.

Som standard nei. SQLite bruker dynamisk typing med typetilhørighet, slik at en kolonne godtar verdier av nesten alle typer uavhengig av deklarert type. For å håndheve streng kontroll, opprett tabellen som en STRICT-tabell, lagt til i SQLite 3.37.

Ja. AI-tekst-til-SQL-assistenter gjør en enkel engelsk beskrivelse av dataene dine om til CREATE TABLE-setninger med kolonner, datatyper og nøkler. Nøyaktigheten forbedres når du gir modellen ditt eksisterende skjema, siden den deretter bruker ekte tabell- og kolonnenavn på nytt.

Ja. GitHub Copilot foreslår ALTER TABLE, DROP TABLE og andre SQLite setninger innebygd i editorer som VS CodeDen leser migreringsfilene og eksisterende spørringer, slik at fullføringene samsvarer med de virkelige tabell- og kolonnenavnene.

Oppsummer dette innlegget med: