V tomto článku si ukážeme, jak vytvořit databázi (také známou jako schéma), tabulky (s datovými typy) a vysvětlíme, jak provést Jazyk manipulace s daty (DML ) operace s daty na MySQL / MariaDB server.
Předpokládá se, že jste dříve 1) nainstalovali potřebné balíčky do systému Linux a 2) spuštěna mysql_secure_installation zlepšit zabezpečení databázového serveru. Pokud ne, postupujte podle níže uvedených pokynů k instalaci serveru MySQL/MariaDB.
- Nainstalujte nejnovější databázi MySQL v systémech Linux
- Nainstalujte nejnovější databázi MariaDB v systémech Linux
Pro stručnost budeme odkazovat na MariaDB výhradně v tomto článku, ale zde uvedené koncepty a příkazy platí pro MySQL také.
Část 1 :Naučte se MySQL / MariaDB pro začátečníky Část 2 :Naučte se používat několik funkcí MySQL a MariaDBVytváření databází, tabulek a oprávněných uživatelů
Jak víte, databázi lze jednoduše definovat jako organizovanou sbírku informací. Zejména MariaDB je systém pro správu relačních databází (RDBMS ) a používá Structure Query Language k provádění operací s databázemi. Navíc mějte na paměti, že MariaDB používá termíny databáze a schéma zaměnitelně.
K ukládání trvalých informací v databázi použijeme tabulky které ukládají řádky dat. Často spolu budou dvě nebo více tabulek nějakým způsobem souviset. To je část organizace, která charakterizuje používání relačních databází.
Vytvoření nové databáze
Chcete-li vytvořit novou databázi s názvem BooksDB
, zadejte výzvu MariaDB pomocí následujícího příkazu (budete vyzváni k zadání hesla pro uživatele root MariaDB):
[[email protected] ~]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE BookstoreDB; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]>
Jakmile je databáze vytvořena, musíme na ní vytvořit alespoň dvě tabulky. Nejprve se však podívejme na koncept datových typů.
Představujeme datové typy MariaDB
Jak jsme vysvětlili dříve, tabulky jsou databázové objekty, kde budeme uchovávat trvalé informace. Každá tabulka se skládá ze dvou nebo více polí (známých také jako sloupce ) daného datového typu (typu informace), které takové pole může uložit.
Nejběžnější typy dat v MariaDB jsou následující (úplný seznam si můžete prohlédnout v oficiální online dokumentaci MariaDB):
Číselné:
- BOOLEAN považuje 0 za nepravdu a všechny ostatní hodnoty za pravdivé.
- TINYINT , pokud se použije s SIGNED, pokrývá rozsah od -128 do 127, zatímco rozsah NESIGNED je 0 až 255.
- SMALLINT , pokud se používá s SIGNED, pokrývá rozsah od -32768 do 32767. Rozsah NESIGNED je 0 až 65535.
- INT , pokud je použit s NESIGNED, pokrývá rozsah od 0 do 4294967295 a v opačném případě -2147483648 až 2147483647.
Poznámka :V TINYINT, SMALLINT a INT se předpokládá výchozí SIGNED.
DOUBLE(M, D) , kde M je celkový počet číslic a D je počet číslic za desetinnou čárkou, představuje číslo s plovoucí desetinnou čárkou s dvojitou přesností. Pokud je uvedeno UNSIGNED, záporné hodnoty nejsou povoleny.
Řetězec:
- VARCHAR(M) představuje řetězec proměnné délky, kde M je maximální povolená délka sloupce v bajtech (65 535 teoreticky). Ve většině případů je počet bajtů shodný s počtem znaků, kromě některých znaků, které mohou zabírat až 3 bajty. Například španělské písmeno ñ představuje jeden znak, ale zabírá 2 bajty.
- TEXT(M) představuje sloupec o maximální délce 65 535 znaků. Nicméně, jak je tomu u VARCHAR(M) , skutečná maximální délka se zkrátí, pokud jsou uloženy vícebajtové znaky. Pokud M je zadáno, sloupec je vytvořen jako nejmenší typ, do kterého lze uložit takový počet znaků.
- MEDIUMTEXT(M) a LONGTEXT(M) jsou podobné TEXT(M) , pouze maximální povolené délky jsou 16 777 215 a 4 294 967 295 znaků.
Datum a čas:
- DATUM představuje datum v RRRR-MM-DD formát.
- ČAS představuje čas v HH:MM:SS.sss formát (hodina, minuty, sekundy a milisekundy).
- DATETIME je kombinace DATE a TIME v RRRR-MM-DD HH:MM:SS formát.
- TIMESTAMP se používá k definování okamžiku přidání nebo aktualizace řádku.
Po prostudování těchto datových typů budete moci lépe určit, který datový typ je třeba přiřadit k danému sloupci v tabulce.
Například jméno osoby se snadno vejde do VARCHAR(50) , zatímco příspěvek na blogu bude potřebovat TEXT typ (vyberte M podle vašich konkrétních potřeb).
Vytváření tabulek s primárním a cizím klíčem
Než se vrhneme na vytváření tabulek, musíme si prostudovat dva základní koncepty relačních databází:primární a zahraniční klíče.
Primární klíč obsahuje hodnotu, která jednoznačně identifikuje každý řádek nebo záznam v tabulce. Na druhé straně cizí klíč slouží k vytvoření propojení mezi daty ve dvou tabulkách a ke kontrole dat, která lze uložit do tabulky, kde se nachází cizí klíč. Primární i cizí klíče jsou obecně INT.
Pro ilustraci použijeme BookstoreDB
a vytvořte dvě tabulky s názvem AuthorsTBL
a BooksTBL
jak následuje. Hodnota NOT NULL omezení označuje, že přidružené pole vyžaduje jinou hodnotu než NULL .
Také AUTO_INCREMENT se používá ke zvýšení hodnoty INT o jednu sloupce primárního klíče při vložení nového záznamu do tabulky.
MariaDB [(none)]> USE BookstoreDB; MariaDB [(none)]> CREATE TABLE AuthorsTBL ( AuthorID INT NOT NULL AUTO_INCREMENT, AuthorName VARCHAR(100), PRIMARY KEY(AuthorID) ); MariaDB [(none)]> CREATE TABLE BooksTBL ( BookID INT NOT NULL AUTO_INCREMENT, BookName VARCHAR(100) NOT NULL, AuthorID INT NOT NULL, BookPrice DECIMAL(6,2) NOT NULL, BookLastUpdated TIMESTAMP, BookIsAvailable BOOLEAN, PRIMARY KEY(BookID), FOREIGN KEY (AuthorID) REFERENCES AuthorsTBL(AuthorID) );Vytvářejte tabulky MySQL s primárním a cizím klíčem
MariaDB [(none)]> USE BookstoreDB; Database changed MariaDB [BookstoreDB]> CREATE TABLE AuthorsTBL ( -> AuthorID INT NOT NULL AUTO_INCREMENT, -> AuthorName VARCHAR(100), -> PRIMARY KEY(AuthorID) -> ); Query OK, 0 rows affected (0.05 sec) MariaDB [BookstoreDB]> CREATE TABLE BooksTBL ( -> BookID INT NOT NULL AUTO_INCREMENT, -> BookName VARCHAR(100) NOT NULL, -> AuthorID INT NOT NULL, -> BookPrice DECIMAL(6,2) NOT NULL, -> BookLastUpdated TIMESTAMP, -> BookIsAvailable BOOLEAN, -> PRIMARY KEY(BookID), -> FOREIGN KEY (AuthorID) REFERENCES AuthorsTBL(AuthorID) -> ); Query OK, 0 rows affected (0.05 sec) MariaDB [BookstoreDB]>
Nyní můžeme pokračovat a začít vkládat záznamy do AuthorsTBL
a BooksTBL
.
Výběr, vkládání, aktualizace a mazání řádků
Nejprve naplníme AuthorsTBL
stůl. Proč? Protože potřebujeme mít hodnoty pro AuthorID
před vložením záznamů do BooksTBL .
Proveďte následující dotaz z řádku MariaDB:
MariaDB [BookstoreDB]> INSERT INTO AuthorsTBL (AuthorName) VALUES ('Agatha Christie'), ('Stephen King'), ('Paulo Coelho');
Poté vybereme všechny záznamy z AuthorsTBL . Nezapomeňte, že budeme potřebovat ID autora pro každý záznam vytvořit INSERT dotaz na BooksTBL .
Pokud chcete načíst jeden záznam po druhém, můžete použít WHERE klauzule označující podmínku, kterou musí řádek splnit, aby byl vrácen. Například,
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie';
Případně můžete vybrat všechny záznamy současně:
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;Výběr a dotaz na záznam v MySQL
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie'; +----------+-----------------+ | AuthorID | AuthorName | +----------+-----------------+ | 1 | Agatha Christie | +----------+-----------------+ 1 row in set (0.00 sec) MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL; +----------+-----------------+ | AuthorID | AuthorName | +----------+-----------------+ | 1 | Agatha Christie | | 2 | Stephen King | | 3 | Paulo Coelho | +----------+-----------------+ 3 rows in set (0.00 sec) MariaDB [BookstoreDB]>
Nyní vytvoříme INSERT dotaz na BooksTBL pomocí odpovídajícího ID autora aby odpovídaly autorovi každé knihy. Hodnota 1 v BookIsAvailable označuje, že kniha je na skladě, 0 jinak:
MariaDB [BookstoreDB]> INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable) VALUES ('And Then There Were None', 1, 14.95, 1), ('The Man in the Brown Suit', 1, 23.99, 1), ('The Stand', 2, 35.99, 1), ('Pet Sematary', 2, 17.95, 0), ('The Green Mile', 2, 29.99, 1), ('The Alchemist', 3, 25, 1), ('By the River Piedra I Sat Down and Wept', 3, 18.95, 0);Vložit dotaz do tabulky MySQL
MariaDB [BookstoreDB]> INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable) -> VALUES ('And Then There Were None', 1, 14.95, 1), -> ('The Man in the Brown Suit', 1, 23.99, 1), -> ('The Stand', 2, 35.99, 1), -> ('Pet Sematary', 2, 17.95, 0), -> ('The Green Mile', 2, 29.99, 1), -> ('The Alchemist', 3, 25, 1), -> ('By the River Piedra I Sat Down and Wept', 3, 18.95, 0); Query OK, 7 rows affected (0.03 sec) Records: 7 Duplicates: 0 Warnings: 0
V tomto okamžiku provedeme SELECT zobrazíte záznamy v BooksTBL . Pak pojďme AKTUALIZOVAT cena „Alchymisty “ od Paula Coelha a VYBRAT znovu ten konkrétní záznam.
Všimněte si, jak BookLastUpdated pole nyní ukazuje jinou hodnotu. Jak jsme vysvětlili dříve, TIMESTAMP pole zobrazuje hodnotu, kdy byl záznam vložen nebo naposledy upraven.
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL; MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6; MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;Vložit dotaz a aktualizovat tabulku do databáze MySQL
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL; +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ | BookID | BookName | AuthorID | BookPrice | BookLastUpdated | BookIsAvailable | +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ | 1 | And Then There Were None | 1 | 14.95 | 2016-10-01 23:31:41 | 1 | | 2 | The Man in the Brown Suit | 1 | 23.99 | 2016-10-01 23:31:41 | 1 | | 3 | The Stand | 2 | 35.99 | 2016-10-01 23:31:41 | 1 | | 4 | Pet Sematary | 2 | 17.95 | 2016-10-01 23:31:41 | 0 | | 5 | The Green Mile | 2 | 29.99 | 2016-10-01 23:31:41 | 1 | | 6 | The Alchemist | 3 | 25.00 | 2016-10-01 23:31:41 | 1 | | 7 | By the River Piedra I Sat Down and Wept | 3 | 18.95 | 2016-10-01 23:31:41 | 0 | +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ 7 rows in set (0.00 sec) MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6; +--------+---------------+----------+-----------+---------------------+-----------------+ | BookID | BookName | AuthorID | BookPrice | BookLastUpdated | BookIsAvailable | +--------+---------------+----------+-----------+---------------------+-----------------+ | 6 | The Alchemist | 3 | 22.75 | 2016-10-01 23:35:00 | 1 | +--------+---------------+----------+-----------+---------------------+-----------------+ 1 row in set (0.00 sec) MariaDB [BookstoreDB]>
Ačkoli to zde neuděláme, můžete záznam také smazat, pokud se již nepoužívá. Předpokládejme například, že chceme odstranit „Alchymista ” z BooksTBL .
K tomu použijeme DELETE prohlášení takto:
MariaDB [BookstoreDB]> DELETE FROM BooksTBL WHERE BookID=6;
Stejně jako v případě AKTUALIZACE , je dobré provést SELECT nejprve za účelem zobrazení záznamů, které mohou být potenciálně ovlivněny funkcí DELETE .
Nezapomeňte také přidat KDE klauzule a podmínka (BookID=6) vyberte konkrétní záznam, který chcete odstranit. V opačném případě riskujete, že smažete všechny řádky v tabulce!
Pokud si přejete zřetězit dvě (nebo více) polí, můžete použít CONCAT prohlášení. Řekněme například, že chceme vrátit sadu výsledků, která se skládá z jednoho pole s názvem knihy a autorem ve tvaru „Alchymista (Paulo Coelho) “ a další sloupec s cenou.
To bude vyžadovat JOIN mezi AutoryTBL a BooksTBL ve společném poli sdíleném oběma tabulkami (AuthorID ):
MariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID;
Jak vidíme, CONCAT nám umožňuje spojit více řetězcových výrazů oddělených čárkami. Také si všimnete, že jsme zvolili alias Popis reprezentovat sadu výsledků zřetězení.
Výstup výše uvedeného dotazu je zobrazen na obrázku níže:
Dotaz na více polí v tabulce MySQLMariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID; +--------------------------------------------------------+-----------+ | Description | BookPrice | +--------------------------------------------------------+-----------+ | And Then There Were None (Agatha Christie) | 14.95 | | The Man in the Brown Suit (Agatha Christie) | 23.99 | | The Stand (Stephen King) | 35.99 | | Pet Sematary (Stephen King) | 17.95 | | The Green Mile (Stephen King) | 29.99 | | The Alchemist (Paulo Coelho) | 25.00 | | By the River Piedra I Sat Down and Wept (Paulo Coelho) | 18.95 | +--------------------------------------------------------+-----------+ 7 rows in set (0.00 sec)
Vytvořit uživatele pro přístup k databázi BookstoreDB
Pomocí rootu pro provedení všech DML operace v databázi je špatný nápad. Abychom tomu zabránili, můžeme vytvořit nový MariaDB uživatelský účet (budeme jej pojmenovat uživatel knihkupectví ) a přidělte všechna potřebná oprávnění pro BookstoreDB :
MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'YourPasswordHere'; MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON BookstoreDB.* to [email protected]; MariaDB [BookstoreDB]> FLUSH PRIVILEGES;Vytvořit nového databázového uživatele s oprávněními
MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'tecmint'; Query OK, 0 rows affected (0.00 sec) MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON BookstoreDB.* to [email protected]; Query OK, 0 rows affected (0.00 sec) MariaDB [BookstoreDB]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
Mít vyhrazeného samostatného uživatele pro každou databázi zabrání poškození celé databáze v případě, že by byl ohrožen jeden účet.
Další tipy pro MySQL
Chcete-li vyčistit MariaDB zadejte následující příkaz a stiskněte Enter :
MariaDB [BookstoreDB]> \! clear
Chcete-li zkontrolovat konfiguraci dané tabulky, postupujte takto:
MariaDB [BookstoreDB]> SELECT COLUMNS IN [TABLE NAME HERE ];
Například,
MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;Zobrazit sloupce v tabulce databáze
MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL; +-----------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-------------------+-----------------------------+ | BookID | int(11) | NO | PRI | NULL | auto_increment | | BookName | varchar(100) | NO | | NULL | | | AuthorID | int(11) | NO | MUL | NULL | | | BookPrice | decimal(6,2) | NO | | NULL | | | BookLastUpdated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | BookIsAvailable | tinyint(1) | YES | | NULL | | +-----------------+--------------+------+-----+-------------------+-----------------------------+ 6 rows in set (0.02 sec)
Rychlá kontrola odhalí, že BookIsAvailable pole připouští NULL hodnoty. Protože to nechceme dovolit, ZMĚNÍME tabulku takto:
MariaDB [BookstoreDB]> ALTER TABLE BooksTBL MODIFY BookIsAvailable BOOLEAN NOT NULL;
(Sloupce můžete znovu zobrazit – zvýrazněné ANO na obrázku výše by nyní mělo být NE ).
Nakonec, chcete-li zobrazit všechny databáze na vašem serveru, proveďte:
MariaDB [BookstoreDB]> SHOW DATABASES; OR MariaDB [BookstoreDB]> SHOW SCHEMAS;Vypsat všechny databáze MySQL
[[email protected] ~]# mysql -u bookstoreuser -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [BookstoreDB]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | BookstoreDB | | information_schema | +--------------------+ 2 rows in set (0.00 sec) MariaDB [BookstoreDB]> SHOW SCHEMAS; +--------------------+ | Database | +--------------------+ | BookstoreDB | | information_schema | +--------------------+ 2 rows in set (0.00 sec)
Následující obrázek ukazuje výsledek výše uvedeného příkazu po otevření výzvy MariaDB jako uživatel knihkupectví (Všimněte si, že tento účet „nevidí“ žádné jiné databáze než BookstoreDB a informační_schéma (k dispozici pro všechny uživatele):
Shrnutí
V tomto článku jsme vysvětlili, jak spustit DML operace a jak vytvořit databázi, tabulky a vyhrazené uživatele v databázi MariaDB. Kromě toho jsme sdíleli několik tipů, které vám mohou usnadnit život jako správce systému / databáze.
- Správa databáze MySQL, část – 1
- Správa databáze MySQL, část – 2
- Ladění a optimalizace výkonu MySQL – část 3
Pokud máte nějaké dotazy k tomuto článku, neváhejte a dejte nám vědět! Neváhejte nás kontaktovat pomocí níže uvedeného formuláře pro komentáře.