Pubblico di destinazione per questo articolo
-
MariaDB (o MySQL) già installato
-
Conoscere un po' di SQL
Se hai sentito parlare diSELECT
eINSERT
, dovresti stare bene. -
Vuoi giocare con il DB usando la CLI (lo schermo nero del terminale)
Se vuoi utilizzare un DB completo, è più facile usare una GUI come Sequel Pro, ma se vuoi solo toccare il DB, è più facile usare il terminale mycli on.
※ Se vuoi leggere la versione giapponese di questo articolo,
per favore vai a questo.
Preparazione Prepariamo mycli!
Che cos'è mycli comunque?
mycli è un'interfaccia CLI per i comuni sistemi di gestione di DB come MySQL (e MariaDB).
※mycli sta per MySQL db client.
Allora, cosa sei felice di usare mycli?
La parte migliore è che il completamento semplifica la digitazione dei comandi sul terminale e riduce gli errori di battitura.
- I comandi di base verranno integrati.
- Verranno visualizzati i nomi delle tabelle e altri suggerimenti per il completamento.
- Facile da vedere con le impostazioni del colore.
Lo screenshot sopra mostra la schermata di connessione usando il normale comando mysql. È difficile da vedere e il completamento del comando non funziona.
Ecco uno screenshot della connessione con il comando mycli. È colorato e ha una bella lista di candidati!
Installa mycli
Puoi installare mycli tramite homebrew
o pip
.
-- If you're Mac user
$ brew update
$ brew install mycli
-- If you're not
$ pip install mycli
Successivamente, controlla mycli installato correttamente.
$ mycli --version
Version: 1.21.1
Configura l'impostazione di mycli, il colore, le associazioni dei tasti ecc,,,
Cambieremo il file di configurazione ~/.myclirc
facendo riferimento al sito ufficiale 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
Proviamo a modificare MariaDB (MySQL) con mycli.
Connessione a DB(DataBase)
Se non hai ancora creato un DB, o se non ricordi che tipo di DB avevi, ometti il nome del database e prova il seguente "Check DB List".
$ mycli -u(USER_NAME) -p(PASSWORD) [DATABASE_NAME]
-- example
$ mycli -uroot -pBARBAR foo_db
Verifica elenco DB
> SHOW DATABASES;
Crea DB
> CREATE DATABASE IF NOT EXISTS test;
Elimina DB
> DROP DATABASE IF EXISTS test;
Verifica il nome host della destinazione della connessione.
> SHOW VARIABLES LIKE 'hostname';
Crea tabella
La query seguente creerà una tabella come questa.
Ecco come appare la relazione (creata da 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)
);
Mostra elenco tabelle
> SHOW TABLES;
Verifica la struttura della tabella
-- DESCRIBE is a synonym for EXPLAIN.
> DESCRIBE TABLE_NAME;
-- example
> DESCRIBE members;
Mostra la query di creazione della tabella
È possibile ottenere informazioni più dettagliate rispetto alle istruzioni DESCRIBE dalla query seguente.
> SHOW CREATE TABLE TABLE_NAME;
Elimina tabella
> DROP TABLE IF EXISTS TABLE_NAME
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
Controlla l'indice
> 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 |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
I significati delle indicazioni di cui sopra sono i seguenti.
Articolo | Descrizione |
---|---|
Tabella | Nome tabella |
Non_unico | 0 se l'indice non può contenere duplicati, 1 se può. |
Nome_chiave | Nome indice se questo indice è chiave primaria, il nome della chiave è sempre PRIMARIA |
Seq_in_index | Il numero di sequenza della colonna nell'indice, a partire da 1. |
Nome_colonna | Nome colonna |
Fascicolazione | Come è ordinata la colonna; in MySQL, questo è "A" (crescente) o NULL (non ordinato) |
Cardinalità | Si riferisce ai tipi di valori che una colonna può assumere. Maggiore è la cardinalità, più è probabile che MySQL utilizzi questo indice durante l'esecuzione di un join. |
Sotto_parte | Se la colonna è solo parzialmente indicizzata, il numero di caratteri indicizzati. NULL se l'intera colonna è indicizzata. |
Imballato | Indica come verrà imballata la chiave. NULL se non è imballato. |
NULLO | Se questa colonna può contenere valori NULL, viene utilizzato YES; in caso contrario, viene utilizzato ''. |
Tipo_indice | Metodo di indicizzazione utilizzato (BTREE、FULLTEXT、HASH、RTREE) |
Commenta | Informazioni su questo indice (ad es. disabilitato se l'indice è disabilitato) |
Commento_indice | Qualsiasi commento fornito per l'indice nell'attributo COMMENT al momento della creazione dell'indice. |
Aggiungi indice a una colonna in una tabella che è già stata creata
> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);
Elimina indice
> DROP INDEX INDEX_NAME ON TABLE_NAME;
-- Or that following is also OK
> ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;
Aggiorna il commento all'indice
> 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";
Inserisci dati
> 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');
Elimina i dati
> DELETE FROM TABLE_NAME;
-- example1
DELETE FROM members;
-- example2
DELETE FROM members WHERE id=3;
Seleziona i dati
> SELECT COLUMN_NAME, FROM TABLE_NAME;
-- example1
> SELECT id, name FROM members;
-- example2
> SELECT * FROM members;
-- example3
> SELECT * FROM members WHERE id=3;
+α Dove l'autore una volta si è bloccato.
Colonne con AUTO_INCREMENT
il vincolo deve essere impostato su chiave.
Aggiungiamo gli indici e impostiamo 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')
Impossibile DROP INDEX
Controlla un indice seguente usando SHOW INDEX
e prova a eliminare PRIMARY
ma,,,
> 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")
Il motivo è che il nome dell'indice della chiave primaria è sempre PRIMARY, ma PRIMARY è una parola riservata, quindi è necessario specificarla come identificatore tra virgolette, altrimenti si verificherà un errore. Funzionerà se lo racchiudi in una virgoletta come segue
> ALTER TABLE members DROP INDEX `PRIMARY`;
Nota:non puoi DROP la KEY di una colonna che ha una sola KEY perché AUTO_INCREMENT
è impostato.
Riferimento
documento ufficiale mycli
MyCLI – Un client MySQL/MariaDB con completamento automatico ed evidenziazione della sintassi / TecMint