Lägg till en kolumn i SQL utan att missa viktiga skillnader

2 november 2026

Tabell med koder som NL, SCH-S, SCH-M, S, U, X, IS, IU, IX, SIU, SIX, UIX, BU, RS-S, RS-U, RI-N, RI-S, RI-U, RI-X, RX-S, RX-U, RX-X. Varje cell innehåller N, C eller I. Denna data kan användas för att lägga till en kolumn i en SQL-databas.

Tabellen fungerar, men formuläret behöver plötsligt lagra en ny uppgift, till exempel en kampanjkod eller ett publiceringsdatum. Vanligen lägger du till kolumnen med ALTER TABLE ... ADD COLUMN, men exakt syntax och vad som händer med befintliga rader beror på databasen.

Databasdiagram som visar tabeller som `playlists`, `tracks` och `invoice_items`. Kolumnen `sql` är synlig i tabellen `tracks`.

Rätt syntax beror på databasmotorn och kolumnens regler

  • Grundmönstret: ALTER TABLE tabell ADD COLUMN kolumn datatyp;
  • Befintliga rader: en ny kolumn kan ge dem NULL eller ett standardvärde, beroende på definitionen.
  • NOT NULL: kontrollera att varje befintlig rad kan få ett giltigt värde innan kolumnen görs obligatorisk.
  • Kolumnordning: SQL Server lägger nya kolumner sist; MySQL har särskild syntax för en annan placering.
  • SQLite: har begränsningar för vilka kolumndefinitioner som kan läggas till direkt.

Börja med en nullable kolumn om befintliga rader saknar värde

Om du vill lägga till exempelvis en kort beskrivning i en redan använd tabell kan grundkommandot se ut så här:

ALTER TABLE products
ADD COLUMN description TEXT;

Med den här definitionen får äldre rader normalt NULL i den nya kolumnen. Det är ofta den minst riskabla starten när appen behöver tid att börja fylla fältet, men det finns en hake om kolumnen ska vara obligatorisk.

En kolumn med NOT NULL får inte sakna värde. Om tabellen redan innehåller rader måste databasmotorn kunna ge dem ett tillåtet värde, vanligtvis via ett standardvärde. I PostgreSQLs dokumentation om ALTER TABLE framgår också att kommandot kan kräva ett starkt lås på tabellen. För en stor, aktiv tabell bör ändringen därför planeras så att den inte överraskar pågående trafik.

Välj syntax efter databasmotorn, inte efter ett allmänt SQL-exempel

Samma idé uttrycks lite olika mellan databaser. Ett kommando som fungerar i en produkt kan fallera i en annan, särskilt när du lägger till en kolumn på en viss position.

Databas Exempel Praktisk skillnad
PostgreSQL ALTER TABLE products ADD COLUMN description TEXT; IF NOT EXISTS kan användas för att undvika fel om kolumnen redan finns.
MySQL ALTER TABLE products ADD COLUMN description TEXT; AFTER column_name eller FIRST kan placera kolumnen på en viss position.
SQL Server ALTER TABLE dbo.products ADD description NVARCHAR(200) NULL; En kolumn som läggs till med T-SQL hamnar sist i tabellen.
SQLite ALTER TABLE products ADD COLUMN description TEXT; Vissa definitioner, som en ny NOT NULL-kolumn utan ett icke-NULL-standardvärde, tillåts inte.

Skillnaden kring placering är lätt att missa. MySQLs ALTER TABLE-dokumentation beskriver FIRST och AFTER, medan Microsofts guide för SQL Server anger att T-SQL lägger till kolumnen sist. Jag tycker att det oftast är bättre att styra visningsordningen i en fråga eller i gränssnittet än att bygga om tabellen bara för kolumnordningens skull.

Om tillägget misslyckas är NULL-regeln ofta första kontrollen

Felmeddelandet pekar ofta mot en konflikt mellan kolumnens krav och tabellens befintliga innehåll. Kontrollera först om kolumnen redan finns, om datatypen passar och om den nya definitionen kräver värden som äldre rader inte har.

Situation Trolig orsak Gör så här
Kommandot klagar på att kolumnen redan finns Skriptet har körts tidigare eller miljön har redan ändrats. Kontrollera tabellens schema och använd en databasspecifik lösning för upprepade migreringar.
En obligatorisk kolumn kan inte läggas till Äldre rader saknar ett giltigt värde. Lägg först till kolumnen som nullable, fyll den med data och inför sedan NOT NULL.
SQLite avvisar standardvärdet SQLite begränsar bland annat uttryck och vissa tidsfunktioner som standardvärde vid direkt tillägg. Använd ett tillåtet konstant standardvärde eller planera en migrering med ny tabell och datakopiering.
Kolumnen hamnar på fel plats Ordningen styrs av databasmotorn och kommandot. Ändra kolumnordningen i SELECT-frågan eller i presentationen i stället för att anta att SQL är portabelt.

SQLite har särskilda begränsningar när en kolumn läggs till, bland annat kring NOT NULL och standardvärden. SQLite-dokumentationen om ALTER TABLE beskriver också att tillägg utan vissa kontroller kan gå snabbt eftersom tabellens innehåll inte behöver skrivas om. Med begränsningar som måste verifieras kan arbetet däremot ta längre tid.

Fyll kolumnen i steg innan du gör den obligatorisk

En trygg migrering för en kolumn som så småningom måste ha ett värde sker ofta stegvis. Då hinner databasen, applikationskoden och befintliga poster komma i takt i stället för att allt ändras på en gång.

  1. Lägg till kolumnen som tillåter NULL.
  2. Uppdatera applikationen så att nya poster sparar ett värde i kolumnen.
  3. Fyll kolumnen för äldre rader med relevanta värden, med en UPDATE-fråga eller en kontrollerad datamigrering.
  4. Kontrollera att inga rader fortfarande saknar värde.
  5. Lägg till NOT NULL när datan uppfyller kravet och databasmotorn stöder ändringen.

Ta en kampanjtabell som exempel: nya registreringar ska få fältet source, men äldre poster har ingen känd källa. Att direkt sätta ett påhittat standardvärde kan förvanska rapporteringen; börja hellre med ett tomt fält och fyll bara i sådant som går att härleda. För SQLite behöver du dessutom välja en metod som följer motorns begränsningar om schemat kräver mer än ett enkelt kolumntillägg.

En liten schemamigrering blir säkrare med en kontroll före driftsättning

Innan du kör ändringen i produktion, kontrollera databastyp, tabellnamn, datatyp och kolumnens null-regel i den miljö där kommandot ska köras. Kör migreringen mot en kopia eller testmiljö först om tabellen är viktig eller stor.

Kontrollera även kod som läser rader med positionsbaserad logik eller använder SELECT *; ett nytt fält kan påverka antaganden utanför själva databasen. När syftet är tydligt och befintliga rader hanteras medvetet blir tillägget oftast enkelt, även om rätt syntax beror på motorn.

Vanliga frågor

Använd grundmönstret ALTER TABLE tabell ADD COLUMN kolumn datatyp;, till exempel ALTER TABLE products ADD COLUMN description TEXT;. Om kolumnen tillåter NULL får äldre rader normalt NULL i det nya fältet. Om fältet ska vara obligatoriskt behöver befintliga rader få giltiga värden, ofta genom ett standardvärde eller en stegvis migrering.
Lägg först till kolumnen så att den tillåter NULL, uppdatera sedan appen så att nya poster får ett värde och fyll i värden för äldre rader. Kontrollera att inga rader fortfarande saknar värde innan du inför NOT NULL. Undvik att hitta på ett standardvärde om det skulle förvanska informationen.
PostgreSQL, MySQL och SQLite använder ofta formen ALTER TABLE ... ADD COLUMN ..., medan SQL Server exempelvis kan använda ALTER TABLE dbo.products ADD description NVARCHAR(200) NULL;. MySQL stöder FIRST och AFTER för kolumnplacering, medan SQL Server lägger den nya kolumnen sist. SQLite begränsar vissa definitioner, bland annat en ny NOT NULL-kolumn utan ett icke-NULL-standardvärde.
Kontrollera om kolumnen redan finns, om datatypen passar och om definitionen kräver värden som äldre rader saknar. Om SQLite avvisar ett standardvärde kan det bero på motorns begränsningar för uttryck och tidsfunktioner. Kontrollera också kolumnordningen: använd en SELECT-fråga eller presentationen för att styra visningen i stället för att anta att syntaxen fungerar likadant i alla databaser.
Betygsätt artikeln

Genomsnitt: 0.0 / 5 · 0 betyg

Taggar

sqlite null-värden alter table schemamigrering
Kommentarer (0)
Lägg till en kommentar