SQLite Skapa, ändra, släpp tabell med exempel

⚡ Smart sammanfattning

SQLite Tabellhantering förlitar sig på tre datadefinitionskommandon, CREATE TABLE för att definiera en tabell, ALTER TABLE för att byta namn på den eller lägga till och ändra kolumner, och DROP TABLE för att ta bort den helt från databasen.

  • 📐 Skapa tabeller: CREATE TABLE-satsen definierar ett tabellnamn och dess kolumner, och varje kolumn behöver ett namn och en datatyp.
  • 🛡️ Undvik fel: Att lägga till IF NOT EXISTS till CREATE TABLE, eller IF EXISTS till DROP TABLE, förhindrar fel när en tabell redan finns eller saknas.
  • ✏️ Ändra tabeller: ALTER TABLE byter namn på en tabell, lägger till en kolumn och i moderna SQLite byter namn på eller tar bort en enskild kolumn.
  • 🗑️ Dropptabeller: Kommandot DROP TABLE tar permanent bort en tabell och alla rader och index som tillhör den.
  • 📑 Kopiera tabeller: CREATE TABLE AS SELECT skapar en ny tabell från de kolumner och rader som returneras av en fråga.
  • 🤖 AI-hjälp: AI text-till-SQL-assistenter och GitHub Copilot genererar CREATE-, ALTER- och DROP-satser från vanliga engelska prompter.

SQLite Skapa ändrings- och släpptabell

Avsnitten nedan visar hur du skapar tabeller, ändrar deras struktur och släpper tabeller i SQLite3 med exempel som täcker kommandona CREATE TABLE, ALTER TABLE och DROP TABLE.

SQLite Skapa tabell

syntax

Nedan är syntaxen för CREATE TABLE-satsen.

CREATE TABLE table_name(
column1 datatype,
column1 datatype
);

För att skapa en tabell ska du använda frågan "CREATE TABLE" enligt följande:

CREATE TABLE guru99 (
  Id Int,
  Name Varchar
);

Inom de två parenteserna efter tabellnamnet definierar du tabellernas kolumner, varje kolumn ska ha följande egenskaper:

  • Ett namn, kolumnnamnet det ska vara unikt bland tabellens kolumner.
  • En datatyp – kolumndatatypen.
  • Valfria kolumnbegränsningar som vi kommer att förklara i senare avsnitt i den här handledningen.

SQLite SKAPA TABELL OM DEN INTE FINNS

När ett skript körs mer än en gång, misslyckas en vanlig CREATE TABLE-sats om tabellen redan finns och stoppas med ett fel. SQLite löser detta med den valfria IF NOT EXISTS-klausulen, som bara skapar tabellen när den saknas och inte gör någonting när den redan finns där.

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

Ovanstående utlöser aldrig felet "tabellen finns redan", vilket gör det säkert att ha den högst upp i ett installations- eller migreringsskript.

Samma idé fungerar i omvänd ordning när du tar bort en tabell. Att lägga till IF EXISTS till DROP TABLE undviker ett fel när tabellen redan är borta:

DROP TABLE IF EXISTS guru99;

Båda klausulerna är vanliga i automatiserade skript, eftersom de låter samma fil köras upprepade gånger utan manuell rensning mellan körningarna.

Släpp bord

För att släppa en tabell, använd kommandot ”DROP TABLE” följt av tabellnamnet enligt följande:

DROP TABLE guru99;

Ändra bord

Du kan använda kommandot ”ALTER TABLE” för att byta namn på en tabell enligt följande:

ALTER TABLE guru99 RENAME TO guru100;

För att verifiera att tabellens namn har ändrats kan du använda kommandot ".tables" för att visa listan över tabeller, och tabellnamnet bör nu ändras enligt följande:

SQLite .tables-utdata som visar tabellen som bytt namn från guru99 till guru100

Som du kan se har tabellnamnet ”guru99” ändrats till ”guru100” efter kommandot ”alter table”.

SQLite lägg till kolumner - Använd kommandot ALTER TABLE

Du kan också använda kommandot ”ALTER TABLE” för att lägga till kolumner:

ALTER TABLE guru100 ADD COLUMN Age INT;

Detta kommer att ändra tabellen "guru100" och lägga till en ny kolumn Ålder i den.

Om du inte såg någon utdata betyder det att kommandot lyckades och att kolumnen lades till. Ingen utdata innebär att markören placeras efter "sqlite>" utan text efter den så här:

SQLite Kommandoraden visar ingen utdata efter en lyckad ALTER TABLE ADD COLUMN

För att verifiera att kolumnen har lagts till kan vi dock använda kommandot ".schema guru100". Detta ger dig tabelldefinitionen, och du bör se den nya kolumnen vi just har lagt till:

SQLite .schema guru100-utdata som visar den nya ålderskolumnen som lagts till i tabellen

SQLite ÄNDRING AV TABELL: Byt namn på och ta bort en kolumn

Utöver att lägga till en kolumn, moderna versioner av SQLite kan också byta namn på en enskild kolumn och ta bort en. Att byta namn på en kolumn har varit möjligt sedan SQLite 3.25, och den uppdaterar namnet i tabelldefinitionen såväl som i varje index, trigger och vy som refererar till kolumnen.

ALTER TABLE guru100 RENAME COLUMN Name TO FullName;

För att ta bort en kolumn, SQLite 3.35 och senare stöder en direkt DROP COLUMN-klausul:

ALTER TABLE guru100 DROP COLUMN Age;

En kolumn kan inte tas bort när den är en del av en primärnyckel, en unik begränsning eller ett index. På äldre SQLite versioner som saknar DROP COLUMN är den klassiska lösningen att skapa en ny tabell med de kolumner du vill ha, kopiera raderna, ta bort den gamla tabellen och slutligen byta namn på den nya.

Hur man kopierar en tabell i SQLite Använda CREATE TABLE AS SELECT

Ibland behöver man en kopia av en tabell, antingen som säkerhetskopia innan en riskabel ändring eller som utgångspunkt för en ny tabell. SQLite bygger detta i ett steg med CREATE TABLE AS SELECT, vilket skapar en ny tabell vars kolumner kommer från en fråga och fyller den med de rader som frågan returnerar.

CREATE TABLE guru100_backup AS SELECT * FROM guru100;

Den nya tabellen "guru100_backup" tar emot samma kolumner och varje rad från "guru100". För att bara kopiera vissa rader, lägg till en WHERE-klausul i SELECT:

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

En sak att komma ihåg är att CREATE TABLE AS SELECT kopierar kolumnnamn, typer och data, men inte primärnycklar, andra begränsningar eller index. Du måste lägga till dessa i den nya tabellen själv om kopian måste tillämpa samma regler som originalet.

SQLite Infoga värde i en tabell

För att infoga värden i en tabell använder vi kommandot ”INSERT INTO” enligt följande:

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

Du kan utelämna kolumnnamnen efter tabellnamnet och skriva det enligt följande:

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

I sådana fall, där du utelämnar kolumnnamnen från tabellerna, måste antalet infogade värden vara exakt samma antal som tabellens kolumner. Sedan kommer varje värde att infogas i korrespondenskolumnen. Till exempel för följande infogningssats:

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

Resultatet av detta uttalande blir följande:

SQLite INSERT INTO-satsen lägger till en rad med värden i guru100-tabellen

  • Värdet 1 kommer att infogas i kolumnen "id".
  • Värdet 'Mike' kommer att infogas i kolumnen "Namn", och
  • Värdet 25 kommer att infogas i kolumnen ”Ålder”.

INSERT … DEFAULT VALUES-sats

Du kan fylla i tabellen med standardvärdena för kolumnerna på en gång enligt följande:

INSERT INTO Tablename DEFAULT VALUES;

Om en kolumn varken tillåter ett nullvärde eller ett standardvärde får du ett felmeddelande om att "NOT NULL constraint failed" (Inte null-begränsningen misslyckades) för den kolumnen. Enligt följande:

SQLite Felet "NOT NULL"-begränsning misslyckades vid INSERT DEFAULT VALUES

Vanliga frågor

Nej. SQLite har inget TRUNCATE TABLE-kommando. För att tömma en tabell, kör DELETE FROM tabellnamn utan en WHERE-klausul och använd sedan VACUUM för att frigöra det frigjorda diskutrymmet. Tabellstrukturen och dess kolumner förblir på plats.

DELETE tar bort rader från en tabell men håller tabellen, dess kolumner och dess struktur redo för nya data. DROP TABLE tar bort hela tabellen, inklusive dess definition, index och triggers, så tabellen finns inte längre i databasen.

Vid SQLite På kommandoraden skriver kommandot .tables dot ut varje tabellnamn. Från SQL, fråga den inbyggda schematabellen med SELECT name FROM sqlite_master WHERE type = 'table'; vilket också fungerar från alla applikationer som är anslutna till databasen.

En temporär tabell skapas med CREATE TEMP TABLE eller CREATE TEMPORARY TABLE. Den är bara synlig för den databasanslutning som skapade den och tas bort automatiskt när anslutningen stängs, vilket gör den användbar för att lagra mellanliggande frågeresultat.

Ja. En primärnyckel är valfri i SQLiteNär du utelämnar en, SQLite behåller fortfarande ett dolt 64-bitars rad-ID som identifierar varje rad. Kolumnbegränsningar som PRIMARY KEY, UNIQUE och NOT NULL är alla valfria när du definierar en tabell.

Som standard nej. SQLite använder dynamisk typing med typtillhörighet, så en kolumn accepterar värden av nästan alla typer oavsett dess deklarerade typ. För att framtvinga strikt kontroll, skapa tabellen som en STRICT-tabell, tillagd i SQLite 3.37.

Ja. AI-text-till-SQL-assistenter omvandlar en enkel engelsk beskrivning av dina data till CREATE TABLE-satser med kolumner, datatyper och nycklar. Noggrannheten förbättras när du ger modellen ditt befintliga schema, eftersom den sedan återanvänder riktiga tabell- och kolumnnamn.

Ja. GitHub Copilot föreslår ALTER TABLE, DROP TABLE och andra SQLite uttalanden inline i redigerare som VS CodeDen läser dina migreringsfiler och befintliga frågor, så att dess kompletteringar matchar dina riktiga tabell- och kolumnnamn.

Sammanfatta detta inlägg med: