Databaser – skapa, döp om och städa

Innan du kan lägga till tabeller behöver du ett “hem” att ställa dem i. I SQL-världen är det själva databasen. Här går vi igenom de vanligaste kommandona och best practises kring backup och miljöer.

TL;DR

  • Skapa databaser med CREATE DATABASE, men gör det idempotent med IF NOT EXISTS.
  • Ta alltid backup innan DROP DATABASE – annars är allt borta.
  • Jobba med namngivning och miljöer (dev/test/prod) för att undvika misstag.

Skapa en databas

CREATE DATABASE IF NOT EXISTS CampusBooks;

Välj databas

USE CampusBooks; -- SQL Server / MySQL

I PostgreSQL används \c CampusBooks i psql eller ConnectionString i klienten.

Byta namn eller ta bort

ALTER DATABASE CampusBooks RENAME TO CampusArchive;  -- PostgreSQL

-- SQL Server (via system stored procedure)
EXEC sp_renamedb 'CampusBooks', 'CampusArchive';
DROP DATABASE IF EXISTS CampusArchive;

⚠️ DROP är oåterkalleligt. Kör BACKUP DATABASE (SQL Server) eller kopiera .db-filen (SQLite) innan du tar bort något.

Miljöstrategi

MiljöSyfteNamnförslag
DevLokal utvecklingCampusBooks_Dev
TestAutomatisk testningCampusBooks_Test
ProdSkarp driftCampusBooks

Låt skript ta emot databasenamnet som parameter så slipper du hårdkoda värden.

Roller och access

CREATE LOGIN campus_dev WITH PASSWORD = 'SuperHemligt123!';
CREATE USER campus_dev FOR LOGIN campus_dev;
EXEC sp_addrolemember 'db_datareader', 'campus_dev';
EXEC sp_addrolemember 'db_datawriter', 'campus_dev';
  • Ge minsta möjliga rättighet (principen om minst privilegium).
  • Ha separata konton för applikation och admin.

Backup och återställning

  • SQL Server: BACKUP DATABASE, RESTORE DATABASE.
  • PostgreSQL: pg_dump, pg_restore.
  • SQLite: kopiera .db-filen när anslutningen är stängd.

Automatisera gärna nattliga backuper och testa återställning regelbundet.

Koppling till C#

Connection strings styr vilken databas du träffar:

var connectionString = "Server=localhost;Database=CampusBooks;Trusted_Connection=True;";
using var connection = new SqlConnection(connectionString);
connection.Open();

Använd IConfiguration/appsettings.json för att hantera olika miljöer.

Checklista

  • Vet du vilken databas du jobbar mot just nu?
  • Finns det backup innan schemaändring?
  • Är rätt användare kopplad till rätt roll?
  • Är IF EXISTS/IF NOT EXISTS med i skripten så de kan köras flera gånger?

Dad joke

Varför blev databasen sen till jobbet?

Den fastnade i en restore-kö.


Upp

Upp


Licens: Apache 2.0 | © 2023 Marcus Medina, Campus Mölndal. Alla rättigheter förbehållna.
Du får använda och modifiera detta verk enligt villkoren i Apache License, Version 2.0. Du får inte använda detta verk för kommersiella ändamål utan tillstånd från upphovsmannen.