🗄️ Ievads MySQL
MySQL ir pasaulē izplatītākā atvērtā pirmkoda relāciju datubāze. Tā glabā datus tabulās, kuras var savienot, filtrēt un analizēt ar SQL vaicājumu valodu.
Kas ir MySQL un relāciju datubāze?
Relāciju datubāzē dati tiek organizēti tabulās (kā Excel lapas), kuras savienoja ar atslēgām. SQL (Structured Query Language) ir standartizēta valoda šo datu apstrādei.
- Datubāze — viena loģiska "mape", piemēram, webshop
- Tabula — viena datu kopas vienība, piemēram, users, products
- Kolonna (lauks) — datu tips, piemēram, id, name, price
- Rinda (ieraksts) — viens konkrēts datu ieraksts
Instalācija un piekļuve
Ātrākais veids lokālai izstrādei ir XAMPP (Windows/macOS/Linux), kas ietver Apache, MySQL un phpMyAdmin.
- Lejupielādē XAMPP no apachefriends.org
- Instalē un palaid Apache + MySQL moduļus
- Atver pārlūkā http://localhost/phpmyadmin
phpMyAdmin ir grafiska saskarne MySQL pārvaldīšanai — taču vislabāk iemācīties rakstīt vaicājumus ar roku. SQL vaicājumus var ievadīt phpMyAdmin cilnē SQL.
Datubāzu pārvaldība
-- Komntāri ar divām domuzīmēm -- Apskatīt visas datubāzes SHOW DATABASES; -- Izveidot datubāzi CREATE DATABASE webshop; CREATE DATABASE IF NOT EXISTS webshop; -- Nekļūdās, ja jau eksistē -- Ar rakstzīmju kodējumu (ieteicams!) CREATE DATABASE webshop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- Aktivizēt datubāzi (turpmākie vaicājumi attiecas uz to) USE webshop; -- Dzēst datubāzi (UZMANĪBU – neatgriezeniski!) DROP DATABASE webshop; DROP DATABASE IF EXISTS webshop; -- Apskatīt aktīvo datubāzi SELECT DATABASE();
Svarīgākie datu tipi
-- SKAITĻI
INT -- Vesels skaitlis (-2 147 483 648 ... 2 147 483 647)
INT UNSIGNED -- Pozitīvs vesels (0 ... 4 294 967 295)
TINYINT -- Mazs vesels (-128 ... 127)
TINYINT(1) -- Boolean analogs (0 vai 1)
BIGINT -- Ļoti liels vesels
DECIMAL(10, 2) -- Precīzs decimāls (10 cipari, 2 zīmes pēc komata)
FLOAT -- Aptuvens decimāls (ātrāks, bet mazāk precīzs)
-- TEKSTS
VARCHAR(255) -- Mainīga garuma teksts (max 255 simboli) -- visbiežāk
CHAR(10) -- Fiksēta garuma teksts (10 simboli vienmēr)
TEXT -- Garš teksts (max ~65 000 simboli)
LONGTEXT -- Ļoti garš teksts (max ~4 GB)
-- DATUMI UN LAIKS
DATE -- Datums: 2025-12-31
TIME -- Laiks: 14:30:00
DATETIME -- Abi: 2025-12-31 14:30:00
TIMESTAMP -- Kā DATETIME, bet automātiski atjaunojas
YEAR -- Tikai gads: 2025
-- PĀRĒJS
BOOLEAN -- TRUE/FALSE (MySQL glabā kā TINYINT(1))
ENUM('a','b','c') -- Iepriekš definētu vērtību saraksts
JSON -- JSON dati (MySQL 5.7.8+)
CREATE TABLE
USE webshop;
-- Vienkārša tabula
CREATE TABLE products (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL DEFAULT 0.00,
description TEXT,
in_stock TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Lietotāju tabula ar UNIQUE e-pasta adresi
CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(80) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role ENUM('user','admin') NOT NULL DEFAULT 'user',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
-- Apskatīt tabulas struktūru
DESCRIBE products; -- vai: DESC products;
SHOW COLUMNS FROM products;
-- Apskatīt visas tabulas datubāzē
SHOW TABLES;
-- Apskatit CREATE vaicajumu
SHOW CREATE TABLE products;
ALTER TABLE – tabulas mainīšana
💡 Atšķirība: DROP, TRUNCATE, DELETE
- DROP TABLE — dzēš tabulu kopā ar struktūru
- TRUNCATE TABLE — iztīra visus datus, saglabā struktūru, atiestata AUTO_INCREMENT
- DELETE FROM — dzēš rindas (ar WHERE filtru), var atjaunot ar transaktu
-- Pievienot kolonnu
ALTER TABLE products
ADD COLUMN category VARCHAR(100) NOT NULL DEFAULT 'Bez kategorijas';
-- Pievienot aiz konkrētas kolonnas
ALTER TABLE products
ADD COLUMN sku VARCHAR(50) UNIQUE AFTER name;
-- Mainīt kolonnas tipu
ALTER TABLE products
MODIFY COLUMN description TEXT NOT NULL;
-- Pārsaukt kolonnu (MySQL 5.7+)
ALTER TABLE products
RENAME COLUMN in_stock TO is_available;
-- Dzēst kolonnu
ALTER TABLE products
DROP COLUMN sku;
-- Pievienot indeksu
ALTER TABLE products
ADD INDEX idx_category (category);
-- Pārsaukt tabulu
RENAME TABLE products TO items;
-- Dzēst tabulu (neatgriezeniski!)
DROP TABLE IF EXISTS items;