Docelowi odbiorcy tego artykułu
-
MariaDB (lub MySQL) już zainstalowana
-
Poznaj trochę SQL
Jeśli słyszałeś oSELECT
iINSERT
, powinno być dobrze. -
Chcesz pobawić się z DB za pomocą CLI (czarny ekran terminala)
Jeśli chcesz obsługiwać pełnowymiarową bazę danych, łatwiej jest użyć graficznego interfejsu użytkownika, takiego jak Sequel Pro, ale jeśli chcesz po prostu dotknąć bazy danych, łatwiej jest użyć mycli na terminalu.
※ Jeśli chcesz przeczytać japońską wersję tego artykułu,
proszę przejdź do tego.
Przygotowanie Skonfigurujmy mycli!
Czym właściwie jest mycli?
mycli to interfejs CLI dla popularnych systemów zarządzania bazami danych, takich jak MySQL (i MariaDB).
※mycli oznacza klienta bazy danych MySQL.
Więc co Ci się podoba w używaniu mycli?
Najlepsze jest to, że uzupełnianie ułatwia wpisywanie poleceń na terminalu i zmniejsza liczbę literówek.
- Podstawowe polecenia zostaną uzupełnione.
- Zostaną wyświetlone nazwy tabel i inne sugestie uzupełnienia.
- Łatwe do zobaczenia dzięki ustawieniom kolorów.
Powyższy zrzut ekranu pokazuje ekran połączenia przy użyciu normalnego polecenia mysql. Trudno to zobaczyć, a uzupełnianie poleceń nie działa.
Oto zrzut ekranu połączenia z poleceniem mycli. Jest kolorowy i ma ładną listę kandydatów!
Zainstaluj mycli
Możesz zainstalować mycli przez homebrew
lub pip
.
-- If you're Mac user
$ brew update
$ brew install mycli
-- If you're not
$ pip install mycli
Następnie sprawdź, czy mycli zostało zainstalowane pomyślnie.
$ mycli --version
Version: 1.21.1
Skonfiguruj ustawienia mycli, kolor, przypisania klawiszy itp.,
Zmienimy plik konfiguracyjny ~/.myclirc
odwołując się do oficjalnej strony 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
Spróbujmy ulepszyć MariaDB (MySQL) za pomocą mycli.
Połącz z bazą danych (baza danych)
Jeśli nie utworzyłeś jeszcze bazy danych lub nie pamiętasz, jaki rodzaj posiadałeś, pomiń nazwę bazy danych i spróbuj wykonać następujące czynności:„Sprawdź listę baz danych”.
$ mycli -u(USER_NAME) -p(PASSWORD) [DATABASE_NAME]
-- example
$ mycli -uroot -pBARBAR foo_db
Sprawdź listę baz danych
> SHOW DATABASES;
Utwórz bazę danych
> CREATE DATABASE IF NOT EXISTS test;
Usuń bazę danych
> DROP DATABASE IF EXISTS test;
Sprawdź nazwę hosta docelowego połączenia.
> SHOW VARIABLES LIKE 'hostname';
Utwórz tabelę
Poniższe zapytanie utworzy taką tabelę.
Oto jak wygląda relacja (utworzona przez tabele)
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)
);
Pokaż listę tabel
> SHOW TABLES;
Sprawdź strukturę tabeli
-- DESCRIBE is a synonym for EXPLAIN.
> DESCRIBE TABLE_NAME;
-- example
> DESCRIBE members;
Pokaż zapytanie tworzenia tabeli
Możesz uzyskać bardziej szczegółowe informacje niż instrukcje DESCRIBE z następującego zapytania.
> SHOW CREATE TABLE TABLE_NAME;
Usuń tabelę
> DROP TABLE IF EXISTS TABLE_NAME
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
Sprawdź indeks
> 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 |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
Znaczenie powyższych wskazań jest następujące.
Przedmiot | Opis |
---|---|
Tabela | Nazwa tabeli |
Nieunikatowe | 0, jeśli indeks nie może zawierać duplikatów, 1, jeśli może. |
Nazwa_klucza | Nazwa indeksu jeśli ten indeks jest kluczem podstawowym, nazwa klucza to zawsze PRIMARY |
Seq_in_index | Numer sekwencyjny kolumny w indeksie, zaczynając od 1. |
Nazwa_kolumny | Nazwa kolumny |
Składanie | Jak sortowana jest kolumna; w MySQL jest to „A” (rosnąco) lub NULL (niesortowane) |
Kardynalność | Odnosi się do typów wartości, jakie może przyjąć kolumna. Im wyższa kardynalność, tym większe prawdopodobieństwo, że MySQL użyje tego indeksu podczas wykonywania złączenia. |
Podczęść | Jeśli kolumna jest tylko częściowo indeksowana, liczba indeksowanych znaków. NULL, jeśli indeksowana jest cała kolumna. |
Pakiety | Wskazuje, jak klucz zostanie spakowany. NULL, jeśli nie jest spakowany. |
NULL | Jeśli ta kolumna może zawierać wartości NULL, używane jest TAK; w przeciwnym razie używany jest ''. |
Typ_indeksu | Użyta metoda indeksowania (BTREE、FULLTEXT、HASH、RTREE) |
Komentarz | Informacje o tym indeksie (np. wyłączony, jeśli indeks jest wyłączony) |
Komentarz_indeksowy | Wszelkie komentarze dostarczone do indeksu w atrybucie COMMENT podczas tworzenia indeksu. |
Dodaj indeks do kolumny w tabeli, która została już utworzona
> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);
Usuń indeks
> DROP INDEX INDEX_NAME ON TABLE_NAME;
-- Or that following is also OK
> ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;
Zaktualizuj komentarz do indeksu
> 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";
Wstaw dane
> 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');
Usuń dane
> DELETE FROM TABLE_NAME;
-- example1
DELETE FROM members;
-- example2
DELETE FROM members WHERE id=3;
Wybierz dane
> SELECT COLUMN_NAME, FROM TABLE_NAME;
-- example1
> SELECT id, name FROM members;
-- example2
> SELECT * FROM members;
-- example3
> SELECT * FROM members WHERE id=3;
+α Tam, gdzie autor utknął.
Kolumny z AUTO_INCREMENT
ograniczenie musi być ustawione na klucz.
Dodajmy indeksy i ustawmy 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')
Nie można DROP INDEX
Sprawdź następujący indeks za pomocą SHOW INDEX
i spróbuj usunąć 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")
Powodem jest to, że nazwa indeksu klucza podstawowego to zawsze PRIMARY, ale PRIMARY jest słowem zastrzeżonym, więc musisz podać go jako identyfikator w cudzysłowie, w przeciwnym razie wystąpi błąd. Zadziała, jeśli umieścisz go w cudzysłowie w następujący sposób
> ALTER TABLE members DROP INDEX `PRIMARY`;
Uwaga:nie możesz UPUŚĆ KLUCZA kolumny, która ma tylko jeden KLUCZ, ponieważ AUTO_INCREMENT
jest ustawiony.
Odniesienie
oficjalny dokument mycli
MyCLI – klient MySQL/MariaDB z automatycznym uzupełnianiem i podświetlaniem składni / TecMint