MySQL na Linuxie - instalacja i użycie


Instalacja i konfiguracja serwera 

0. Uruchom Linuxa na WSL-u lub fizycznie na maszynie i najpierw zaktualizuj managera pakietów:
sudo apt update
i sprawdź czy już nie masz serwera MySQL:
mysql --version

1. Teraz zainstaluj serwer MySQL:
sudo apt install mysql-server

2. Po zainstalowaniu sprawdź jeszcze raz wersję:
mysql --version
a następnie status uruchomienia:
sudo service mysql status

3. Wystartuj serwer:
sudo service mysql start

4. Wejdź do konsoli (uwaga - schodzimy poziom niżej z konsoli Terminala do konsoli serwera MySQL):
sudo mysql
Od teraz będziesz widział inny wiersz i znak zachęty:
mysql >

a każde polecenie będziesz musiał zakończyć znakiem średnika - tego wymaga składania SQL.

5. Utwórz usera:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password123';

6. Nadaj mu pełne uprawnienia do wszystkiego:
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' WITH GRANT OPTION;
i zastosuj zmiany:
FLUSH PRIVILEGES;

7. Zamknij sesję:
EXIT;
i przetestuj użytkownika:
mysql -u newuser -p
 

Utworzenie bazy danych i praca na niej 

0. Sprawdź jakie masz bazy danych - na początku lista będzie pusta, ale później pomoże Ci to w wyborze bazy:
SHOW DATABASES;

1. Utwórz bazę danych:
CREATE DATABASE testowa_baza;

2. Aby móc z niej pracować, w SQL-u musisz przełączyć się na jej kontekst:
USE testowa_baza;

! - warte uwagi: ponieważ z tego i wielu kolejnych poleceń SQL będziesz korzystał często, stwórz sobie kilka plików skryptów SQL. Są to zwykłe pliki tekstowe, które stworzysz nawet w notatniku, tylko nadaj im rozszerzenie 'sql'.

Niech pierwszy nazywa się schema.sql. Umieść w nim polecenia:
CREATE DATABASE testowa_baza;
USE testowa_baza;

Gdy będziesz pracował w aplikacją MySQL Workbench od Oracle lub z DBeaver, otworzysz ten plik w tamtejszym edytorze, zaznaczysz linijkę USE testowa_baza; i uruchomisz tylko ją i od razu będziesz miał załadowany kontekst tej konkretnej bazy danych.

3. Teraz stwórz tabele - oto model danych, jaki będziemy realizować:

 

Model danych

Schemat bazy zakłada dwie tabele wymiarów: Clients i Products, a także jedną tabelę faktów: Orders.

Tabele Clients i Products nie mogą być ze sobą połączone bezpośrednio gdyż oznaczałoby to, że jeden klient może zakupić tylko jeden produkt, a każdy produkt może być zakupiony tylko raz i to tylko przez jednego klienta. Potrzebną nam elastyczność uzyskamy poprzez wprowadzenie tabeli łączącej, która będzie przechowywała zamówienia klientów - tu będziemy rejestrować zdarzenia sprzedaży, gdzie dowolny klient będzie mógł wiele razy skomponować dowolną niepustą listę zakupów, a dowolny produkt będzie mógł być kupiony przez dowolnego klienta od zera do wielu razy.

Składnia do stworzenia tabel:

CREATE TABLE IF NOT EXISTS clients (
    pk_id INT AUTO_INCREMENT,
    first_name VARCHAR(15),
    last_name VARCHAR(15),
    e_mail VARCHAR(50),
    PRIMARY KEY (pk_id)
);
DESCRIBE clients;


CREATE TABLE IF NOT EXISTS products (
    pk_id INT AUTO_INCREMENT,
    product_name VARCHAR(15),
    measure VARCHAR(10),
    price DECIMAL(10, 2),
    PRIMARY KEY (pk_id)
);
DESCRIBE products


CREATE TABLE IF NOT EXISTS orders (
    pk_id INT AUTO_INCREMENT,
    client_id INT,
    product_id INT,
    PRIMARY KEY (pk_id),
    FOREIGN KEY (client_id) REFERENCES clients (pk_id),
    FOREIGN KEY (product_id) REFERENCES products (pk_id)
);
DESCRIBE orders

! - warte wagi: zapisz te polecenia w kolejnym pliku skryptu, który nazwiesz create_tables.sql.

4. Wypełnij tabele danymi - tworzymy klientów:

INSERT INTO testowa_baza.clients (first_name, last_name, e_mail) VALUES
('adam', 'adamsky', 'adam.adamsky@mail.com'),
('bartek', 'bartkovsky', 'bartek.bartkovsky@mail.com'),
('czesiek', 'czechowski', 'czesiek.czechowski@mail.com'),
('darek', 'darecki', 'darek.darecki@mail.com'),
('edek', 'edovsky', 'edek.edovsky@mail.com'),
('franek', 'franecki', 'franek.franecki@mail.com'),
('gienek', 'gniotek', 'gienek.gniotek@mail.com'),
('heniek', 'hotek', 'heneik.hotek@mail.com'),
('irek', 'irkovsky', 'irek.irkovsky@mail.com'),
('janek', 'jankovsky', 'janek.jankovsky@mail.com');

Tworzymy katalog produktów:
    
INSERT INTO testowa_baza.products (product_name, measure, price) VALUES
('arbuz', 'kg', '11'),
('banan', 'kg', '8'),
('cytryna', 'kg', '7'),
('daktyl', 'kg', '20'),
('sok', 'L', '12');

Tworzymy transakcje zakupów dokonanych przez klientów:

INSERT INTO testowa_baza.orders (client_id, product_id) VALUES
(5, 3);
INSERT INTO testowa_baza.orders (client_id, product_id) VALUES
(6, 4);
INSERT INTO testowa_baza.orders (client_id, product_id) VALUES
(1, 1);
 

! - warte uwagi: zapisz w pliku skryptu o nazwie inserts.sql.

5. Poodpytuj bazę o dane:

SELECT * FROM clients;
SELECT * FROM products;
SELECT * FROM orders;
 

! - warte uwagi: zapisz w pliku skryptu o nazwie queries.sql

 

Oto masz gotową relacyjną bazę danych do celów edukacyjnych. 

Komentarze