Cílové publikum pro tento článek
-
MariaDB (nebo MySQL) je již nainstalována
-
Znát nějaké SQL
Pokud jste slyšeli oSELECT
aINSERT
, měli byste být v pořádku. -
Chcete si pohrát s DB pomocí CLI (černá obrazovka terminálu)
Pokud chcete provozovat plnohodnotnou DB, je jednodušší použít GUI, jako je Sequel Pro, ale pokud se chcete DB jen dotknout, je jednodušší použít mycli na terminálu.
※ Pokud si chcete přečíst japonskou verzi tohoto článku,
přejděte prosím na tento.
Příprava Pojďme nastavit mycli!
Co je vlastně mycli?
mycli je rozhraní CLI pro běžné systémy správy DB, jako je MySQL (a MariaDB).
※mycli znamená MySQL db client.
Co vás tedy těší používání mycli?
Nejlepší na tom je, že dokončení usnadňuje psaní příkazů na terminálu a snižuje překlepy.
- Budou doplněny základní příkazy.
- Zobrazí se názvy tabulek a další návrhy na dokončení.
- Snadno vidět díky nastavení barev.
Snímek výše ukazuje obrazovku připojení pomocí normálního příkazu mysql. Je to špatně vidět a dokončování příkazu nefunguje.
Zde je snímek obrazovky spojení s příkazem mycli. Je barevný a má pěkný seznam kandidátů!
Nainstalujte mycli
Mycli můžete nainstalovat pomocí homebrew
nebo pip
.
-- If you're Mac user
$ brew update
$ brew install mycli
-- If you're not
$ pip install mycli
Poté zkontrolujte, zda je mycli úspěšně nainstalováno.
$ mycli --version
Version: 1.21.1
Konfigurace nastavení mycli, barvy, klávesových zkratek atd.,,,
Změníme konfigurační soubor ~/.myclirc
odkazem na oficiální web mycli.
# Change coloro(The text will be a young grass color.)
syntax_style = native
# Change key bindings
key_bindings = vi
# Display a wider selection of candidates
wider_completion_menu = True
Zkusme vyladit MariaDB (MySQL) pomocí mycli.
Připojit k DB(DataBase)
Pokud jste ještě nevytvořili DB, nebo si nepamatujete, jaký druh DB jste měli, vynechejte název databáze a zkuste následující „Zkontrolovat seznam DB“.
$ mycli -u(USER_NAME) -p(PASSWORD) [DATABASE_NAME]
-- example
$ mycli -uroot -pBARBAR foo_db
Zkontrolujte seznam DB
> SHOW DATABASES;
Vytvořit DB
> CREATE DATABASE IF NOT EXISTS test;
Smazat DB
> DROP DATABASE IF EXISTS test;
Zkontrolujte název hostitele cíle připojení.
> SHOW VARIABLES LIKE 'hostname';
Vytvořit tabulku
Následující dotaz vytvoří tabulku podobnou této.
Zde je návod, jak vypadá vztah (vytvořeno tbls)
CREATE TABLE TABLE_NAME (COLUMN_NAME DATA_TYPE CONSTRAINT,...
FOREIGN KEY INDEX_NAME (COLUMN_NAME, ...)
REFERENCES TABLE_NAME_TO_REFERENCE (COLUMN_NAME, ...),
INDEX INDEX_NAME(COLUMN_NAME) COMMENT 'COMMENT');
-- example
> CREATE TABLE IF NOT EXISTS members (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(255) NOT NULL UNIQUE,
email varchar(255) NOT NULL UNIQUE,
password varchar(100) NOT NULL,
picture varchar(255) NOT NULL DEFAULT '/default_icon.jpg',
created DATETIME NOT NULL,
modified TIMESTAMP NOT NULL,
-- Index queries tend to be long, so I divide them as follows
INDEX idx_members_id_01(id) COMMENT 'for search member quickly'
);
> CREATE TABLE IF NOT EXISTS posts (
post_id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id MEDIUMINT NOT NULL,
content VARCHAR(900),
posted_at TIMESTAMP NOT NULL,
FOREIGN KEY fk_posts_userid_01(user_id)
REFERENCES members (id)
);
Zobrazit seznam tabulek
> SHOW TABLES;
Zkontrolujte strukturu tabulky
-- DESCRIBE is a synonym for EXPLAIN.
> DESCRIBE TABLE_NAME;
-- example
> DESCRIBE members;
Zobrazit dotaz vytvoření tabulky
Z následujícího dotazu můžete získat podrobnější informace než příkazy DESCRIBE.
> SHOW CREATE TABLE TABLE_NAME;
Smazat tabulku
> DROP TABLE IF EXISTS TABLE_NAME
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
Zkontrolujte index
> SHOW INDEX FROM TABLE_NAME;
-- example
> SHOW INDEX FROM members;
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
| members | 0 | PRIMARY | 1 | id | A | 0 | <null> | <null> | | BTREE | | |
| members | 0 | name | 1 | name | A | 0 | <null> | <null> | | BTREE | | |
| members | 0 | email | 1 | email | A | 0 | <null> | <null> | | BTREE | | |
| members | 1 | idx_members_id_01 | 1 | id | A | 0 | <null> | <null> | | BTREE | | for search member quickly |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
Význam výše uvedených označení je následující.
Položka | Popis |
---|---|
Tabulka | Název tabulky |
Non_unique | 0, pokud index nemůže obsahovat duplikáty, 1, pokud může. |
Jméno_klíče | Jméno indexu, pokud je tento index primárním klíčem, je název klíče vždy PRIMARY |
Seq_in_index | Pořadové číslo sloupce v indexu počínaje 1. |
Název_sloupce | Název sloupce |
Řazení | Jak je sloupec řazen; v MySQL je to buď "A" (vzestupně) nebo NULL (neřazeno) |
Kardinalita | Odkazuje na typy hodnot, které může sloupec nabývat. Čím vyšší je mohutnost, tím je pravděpodobnější, že MySQL použije tento index při provádění spojení. |
Podčást | Pokud je sloupec indexován pouze částečně, počet indexovaných znaků. NULL, pokud je indexován celý sloupec. |
Zabaleno | Udává, jak bude klíč zabalen. NULL, pokud není zabaleno. |
NULL | Pokud tento sloupec může obsahovat hodnoty NULL, použije se YES; jinak se používá ''. |
Index_type | Použitá metoda indexování (BTREE、FULLTEXT、HASH、RTREE) |
Komentář | Informace o tomto indexu (např. zakázáno, pokud je index zakázán) |
Index_comment | Jakýkoli komentář, který byl poskytnut pro index v atributu COMMENT při vytváření indexu. |
Přidat index ke sloupci v tabulce, která již byla vytvořena
> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);
Smazat index
> DROP INDEX INDEX_NAME ON TABLE_NAME;
-- Or that following is also OK
> ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;
Aktualizovat komentář indexu
> ALTER TABLE TABLE_NAME
DROP INDEX INDEX_NAME,
ADD FULLTEXT INDEX INDEX_NAME (COLUMN_NAME) COMMENT "COMMENT";
-- example
> ALTER TABLE members
DROP INDEX idx_members_id_01,
ADD INDEX idx_members_01 (id) COMMENT "ARA ARA";
Vložit data
> INSERT INTO TABLE_NAME (COLUMN_NAME) VALUES (VALUE);
-- example1
> INSERT INTO members
VALUES
(1, 'Nobunaga Oda', '[email protected]', 'HOGE', '/oda_icon.jpg', '2020-12-02 1:14:22', '2020-12-02 1:14:22');
-- example2
> INSERT INTO members
(name, email, password, picture, created)
VALUES
('Hideyoshi Toyotomi', '[email protected]', 'FUGA', '/toyo_icon.jpg', '2020-12-01 10:00:00');
Smazat data
> DELETE FROM TABLE_NAME;
-- example1
DELETE FROM members;
-- example2
DELETE FROM members WHERE id=3;
Vyberte data
> SELECT COLUMN_NAME, FROM TABLE_NAME;
-- example1
> SELECT id, name FROM members;
-- example2
> SELECT * FROM members;
-- example3
> SELECT * FROM members WHERE id=3;
+α Kde se autor kdysi zasekl.
Sloupce s AUTO_INCREMENT
omezení musí být nastaveno na klíč.
Přidáme indexy a nastavíme PRIMARY KEY
.
CREATE TABLE members (
id INT NOT NULL AUTO_INCREMENT,
name varchar(255)
);
(1075, 'Incorrect table definition; there can be only one auto column and it must be defined as a key')
Nelze DROP INDEX
Zkontrolujte následující index pomocí příkazu SHOW INDEX
a zkuste odstranit PRIMARY
ale,,,
> ALTER TABLE members DROP INDEX PRIMARY;
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'PRIMARY ON members' at line 1")
Důvodem je, že indexový název primárního klíče je vždy PRIMARY, ale PRIMARY je vyhrazené slovo, takže jej musíte zadat jako identifikátor v uvozovkách, jinak dojde k chybě. Bude to fungovat, když to uzavřete do zadní uvozovky následovně
> ALTER TABLE members DROP INDEX `PRIMARY`;
Poznámka:KLÍČ sloupce, který má pouze jeden KLÍČ, nelze ODLOŽIT, protože AUTO_INCREMENT
je nastaveno.
Reference
oficiální dokument mycli
MyCLI – klient MySQL/MariaDB s automatickým dokončováním a zvýrazňováním syntaxe / TecMint