SQLite Opret, ændre, slip tabel med eksempler

⚡ Smart opsummering

SQLite Tabelhåndtering er afhængig af tre datadefinitionskommandoer: CREATE TABLE til at definere en tabel, ALTER TABLE til at omdøbe den eller tilføje og ændre kolonner, og DROP TABLE til at fjerne den helt fra databasen.

  • 📐 Opret tabeller: CREATE TABLE-sætningen definerer et tabelnavn og dets kolonner, og hver kolonne skal have et navn og en datatype.
  • 🛡️ Undgå fejl: Tilføjelse af IF NOT EXISTS til CREATE TABLE eller IF EXISTS til DROP TABLE forhindrer fejl, når en tabel allerede findes eller mangler.
  • ✏️ Ændre tabeller: ALTER TABLE omdøber en tabel, tilføjer en kolonne, og i moderne SQLite omdøber eller sletter en enkelt kolonne.
  • 🗑️ Drop-tabeller: Kommandoen DROP TABLE fjerner permanent en tabel og alle rækker og indeks, der tilhører den.
  • 📑 Kopiér tabeller: CREATE TABLE AS SELECT opbygger en ny tabel ud fra de kolonner og rækker, der returneres af en forespørgsel.
  • 🤖 AI assistance: AI tekst-til-SQL-assistenter og GitHub Copilot genererer CREATE-, ALTER- og DROP-sætninger ud fra almindelige engelske prompter.

SQLite Opret Ændre Drop-tabel

Afsnittene nedenfor viser, hvordan du opretter tabeller, ændrer deres struktur og slipper tabeller i SQLite3 med eksempler, der dækker kommandoerne CREATE TABLE, ALTER TABLE og DROP TABLE.

SQLite Opret tabel

Syntaks

Nedenfor er syntaksen for CREATE TABLE-sætningen.

CREATE TABLE table_name(
column1 datatype,
column1 datatype
);

For at oprette en tabel skal du bruge forespørgslen "CREATE TABLE" som følger:

CREATE TABLE guru99 (
  Id Int,
  Name Varchar
);

Inden for de to parenteser efter tabelnavnet definerer du tabellernes kolonner, hver kolonne skal have følgende egenskaber:

  • Et navn, kolonnenavnet det skal være unikt blandt tabellens kolonner.
  • En datatype – kolonnedatatypen.
  • Valgfrie kolonnebegrænsninger, som vi vil forklare i de senere afsnit i denne vejledning.

SQLite OPRET TABEL HVIS DEN IKKE FINDER

Når et script køres mere end én gang, fejler en almindelig CREATE TABLE-sætning, hvis tabellen allerede findes, og stopper med en fejl. SQLite løser dette med den valgfrie IF NOT EXISTS-klausul, som kun opretter tabellen, når den mangler, og ikke gør noget, når den allerede er der.

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

Ovenstående sætning giver aldrig fejlen "tabellen findes allerede", hvilket gør det sikkert at opbevare den øverst i et opsætnings- eller migreringsscript.

Den samme idé fungerer i omvendt rækkefølge, når du fjerner en tabel. Tilføjelse af IF EXISTS til DROP TABLE undgår en fejl, når tabellen allerede er væk:

DROP TABLE IF EXISTS guru99;

Begge klausuler er almindelige i automatiserede scripts, fordi de lader den samme fil køre gentagne gange uden manuel oprydning mellem kørsler.

Drop bord

For at slette en tabel skal du bruge kommandoen "DROP TABLE" efterfulgt af tabelnavnet som følger:

DROP TABLE guru99;

Skift bord

Du kan bruge kommandoen "ALTER TABLE" til at omdøbe en tabel på følgende måde:

ALTER TABLE guru99 RENAME TO guru100;

For at bekræfte, at tabellens navn er ændret, kan du bruge kommandoen “.tables” til at vise listen over tabeller, og tabelnavnet bør nu ændres som følger:

SQLite .tables output viser tabellen omdøbt fra guru99 til guru100

Som du kan se, er tabelnavnet "guru99" ændret til "guru100" efter kommandoen "alter table".

SQLite tilføje kolonner - Brug ALTER TABLE-kommandoen

Du kan også bruge kommandoen “ALTER TABLE” til at tilføje kolonner:

ALTER TABLE guru100 ADD COLUMN Age INT;

Dette vil ændre tabellen “guru100” og tilføje en ny kolonne med alder.

Hvis du ikke så noget output, betyder det, at sætningen var vellykket, og kolonnen blev tilføjet. Intet output betyder, at markøren vil blive placeret efter "sqlite>" uden tekst efter den, sådan her:

SQLite Kommandolinje viser intet output efter en vellykket ALTER TABLE ADD COLUMN

For at bekræfte, at kolonnen blev tilføjet, kan vi dog bruge kommandoen ".schema guru100". Dette vil give dig tabeldefinitionen, og du bør se den nye kolonne, vi lige har tilføjet:

SQLite .schema guru100 output, der viser den nye alderskolonne, der er tilføjet til tabellen

SQLite ÆNDRE TABEL: Omdøb og slet en kolonne

Ud over at tilføje en kolonne, moderne versioner af SQLite kan også omdøbe en enkelt kolonne og fjerne en. Omdøbning af en kolonne har været muligt siden SQLite 3.25, og den opdaterer navnet i tabeldefinitionen samt i hvert indeks, hver trigger og hver visning, der refererer til kolonnen.

ALTER TABLE guru100 RENAME COLUMN Name TO FullName;

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

ALTER TABLE guru100 DROP COLUMN Age;

En kolonne kan ikke slettes, når den er en del af en primærnøgle, en unik begrænsning eller et indeks. På ældre SQLite versioner, der mangler DROP COLUMN, er den klassiske løsning at oprette en ny tabel med de ønskede kolonner, kopiere rækkerne hen over, slette den gamle tabel og til sidst omdøbe den nye.

Sådan kopierer du en tabel i SQLite Brug af CREATE TABLE AS SELECT

Nogle gange har du brug for en kopi af en tabel, enten som en sikkerhedskopi før en risikabel ændring eller som udgangspunkt for en ny tabel. SQLite bygger dette i ét trin med CREATE TABLE AS SELECT, som opretter en ny tabel, hvis kolonner kommer fra en forespørgsel, og udfylder den med de rækker, som forespørgslen returnerer.

CREATE TABLE guru100_backup AS SELECT * FROM guru100;

Den nye tabel “guru100_backup” modtager de samme kolonner og hver række fra “guru100”. For kun at kopiere nogle rækker, tilføj en WHERE-klausul til SELECT:

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

En ting man skal huske på er, at CREATE TABLE AS SELECT kopierer kolonnenavne, typer og data, men den kopierer ikke primære nøgler, andre begrænsninger eller indekser. Du skal selv tilføje disse til den nye tabel, hvis kopien skal håndhæve de samme regler som originalen.

SQLite Indsæt værdi i en tabel

For at indsætte værdier i en tabel bruger vi "INSERT INTO"-sætningen som følger:

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

Du kan udelade kolonnenavnene efter tabelnavnet og skrive det som følger:

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

I sådanne tilfælde, hvor du udelader kolonnenavnene fra tabellerne, skal antallet af indsatte værdier være det samme nøjagtige antal af tabellens kolonner. Derefter vil hver værdi blive indsat i korrespondancekolonnen. For eksempel for følgende indsæt sætning:

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

Resultatet af denne erklæring vil være som følger:

SQLite INSERT INTO-sætning tilføjer en række værdier til guru100-tabellen

  • Værdien 1 vil blive indsat i kolonnen "id".
  • Værdien 'Mike' vil blive indsat i kolonnen "Navn", og
  • Værdien 25 vil blive indsat i kolonnen "Alder".

INSERT … DEFAULT VALUES-sætning

Du kan udfylde tabellen med standardværdierne for kolonnerne på én gang som følger:

INSERT INTO Tablename DEFAULT VALUES;

Hvis en kolonne ikke tillader en null-værdi eller en standardværdi, får du en fejlmeddelelse om, at "NOT NULL constraint failed" (IKKE NULL-begrænsning mislykkedes) for den pågældende kolonne. Som følger:

SQLite Fejlen "IKKE NULL-begrænsning mislykkedes" fra INSERT DEFAULT VALUES

Ofte Stillede Spørgsmål

Nej. SQLite har ingen TRUNCATE TABLE-kommando. For at tømme en tabel skal du køre DELETE FROM tabelnavn uden en WHERE-klausul og derefter bruge VACUUM til at genvinde den frigjorte diskplads. Tabelstrukturen og dens kolonner forbliver på plads.

DELETE fjerner rækker fra en tabel, men holder tabellen, dens kolonner og dens struktur klar til nye data. DROP TABLE fjerner hele tabellen, inklusive dens definition, indekser og triggere, så tabellen ikke længere findes i databasen.

Ved SQLite På kommandolinjen udskriver .tables dot-kommandoen alle tabelnavne. Fra SQL forespørges den indbyggede skematabel med SELECT name FROM sqlite_master WHERE type = 'table'; hvilket også fungerer fra ethvert program, der er forbundet til databasen.

En midlertidig tabel oprettes med CREATE TEMP TABLE eller CREATE TEMPORARY TABLE. Den er kun synlig for den databaseforbindelse, der oprettede den, og slettes automatisk, når forbindelsen lukkes, hvilket gør den nyttig til at gemme mellemliggende forespørgselsresultater.

Ja. En primærnøgle er valgfri i SQLiteNår du udelader én, SQLite bevarer stadig et skjult 64-bit rowid, der identificerer hver række. Kolonnebegrænsninger som PRIMARY KEY, UNIQUE og NOT NULL er alle valgfrie, når du definerer en tabel.

Som standard nej. SQLite bruger dynamisk typing med typeaffinitet, så en kolonne accepterer værdier af næsten enhver type uanset dens deklarerede type. For at håndhæve streng kontrol skal du oprette tabellen som en STRICT-tabel, tilføjet i SQLite 3.37.

Ja. AI-tekst-til-SQL-assistenter omdanner en almindelig engelsk beskrivelse af dine data til CREATE TABLE-sætninger med kolonner, datatyper og nøgler. Nøjagtigheden forbedres, når du giver modellen dit eksisterende skema, da den derefter genbruger rigtige tabel- og kolonnenavne.

Ja. GitHub Copilot foreslår ALTER TABLE, DROP TABLE og andre SQLite udsagn indlejret i editorer som f.eks. VS CodeDen læser dine migreringsfiler og eksisterende forespørgsler, så dens fuldførelser matcher dine rigtige tabel- og kolonnenavne.

Opsummer dette indlæg med: