MariaDB cheat sheet

Grundlæggende MariaDB til relationsdatabaser og SQL

Navngivning

Engelske navne foretrækkes. Uanset sprog bruges ental for entiteter og tabeller: product, ikke products. Brug kun A-Z i tekniske navne. Skriv æ/Æ som ae/AE, ø/Ø som oe/OE og å/Å som aa/AA, for eksempel Børn → Boern og År → Aar.

Vigtige datatyper

  • INT / BIGINT - heltal
  • DECIMAL(10,2) - præcise beløb
  • VARCHAR(255) - tekst med maksimal længde
  • TEXT - længere tekst
  • BOOLEAN - gemmes som typisk som 0/1
  • DATE - kalenderdato
  • DATETIME - dato og klokkeslæt
  • BLOB - binære data

Opret tabel og id

CREATE TABLE product (
  product_id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  price DECIMAL(10,2) NOT NULL,
  inventory INT NOT NULL DEFAULT 0
) ENGINE=InnoDB;

AUTO_INCREMENT genererer næste id. DECIMAL er velegnet til beløb, hvor decimalerne skal være præcise.

Constraints

  • NOT NULL - værdi er påkrævet
  • UNIQUE - værdien må ikke gentages
  • PRIMARY KEY - entydig identifikation
  • FOREIGN KEY - reference til anden tabel
  • CHECK - regel for værdier
  • DEFAULT - standardværdi
inventory INT NOT NULL
  CHECK (inventory >= 0)

Relationer

CREATE TABLE customer (
  customer_id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) UNIQUE NOT NULL
) ENGINE=InnoDB;

CREATE TABLE customer_order (
  order_id INT PRIMARY KEY AUTO_INCREMENT,
  customer_id INT NOT NULL,
  order_date DATE NOT NULL,
  FOREIGN KEY (customer_id)
    REFERENCES customer(customer_id)
) ENGINE=InnoDB;

Brug InnoDB, når tabellerne skal bruge fremmednøgler og transaktioner.

INSERT - opret data

INSERT INTO product (name, price, inventory)
VALUES ('Tekop', 75.00, 20);

INSERT INTO product (name, price, inventory)
VALUES
  ('Tallerken', 120.00, 8),
  ('Kande', 250.00, 4);

SELECT - læs data

SELECT product_id, name, price
FROM product
WHERE inventory > 0
ORDER BY price DESC;

SELECT COUNT(*) AS antal
FROM product;

UPDATE - ændr data

UPDATE product
SET inventory = inventory - 1
WHERE product_id = 1;

Kontrollér altid WHERE-betingelsen først.

DELETE - slet data

DELETE FROM product
WHERE product_id = 1;

En DELETE uden WHERE sletter alle rækker.

JOIN

SELECT c.name, o.order_id, o.order_date
FROM customer AS c
JOIN customer_order AS o
  ON o.customer_id = c.customer_id;

SELECT o.order_id, p.name, ol.quantity
FROM order_line AS ol
JOIN customer_order AS o
  ON o.order_id = ol.order_id
JOIN product AS p
  ON p.product_id = ol.product_id;

Dato og klokkeslæt

SELECT CURRENT_DATE();
SELECT NOW();

SELECT *
FROM customer_order
WHERE order_date >= '2026-01-01';

Brug DATE til datoer og DATETIME til dato med klokkeslæt.

Transaktion

START TRANSACTION;
UPDATE product
SET inventory = inventory - 1
WHERE product_id = 1;
COMMIT;

-- Ved problem:
ROLLBACK;

Transaktioner sikrer, at sammenhørende ændringer gennemføres samlet.

Husk

  • Brug DECIMAL til præcise beløb.
  • Brug DATE og DATETIME til datoer.
  • Brug InnoDB til fremmednøgler og transaktioner.
  • Brug sigende tabel- og kolonnenavne.
  • Test schemaet med realistiske use cases.