Public cible de cet article
-
MariaDB (ou MySQL) déjà installé
-
Connaître un peu de SQL
Si vous avez entendu parler deSELECT
etINSERT
, ça devrait aller. -
Vous voulez jouer avec la DB en utilisant le CLI (l'écran noir du terminal)
Si vous souhaitez exploiter une base de données à grande échelle, il est plus facile d'utiliser une interface graphique telle que Sequel Pro, mais si vous souhaitez simplement toucher la base de données, il est plus facile d'utiliser le mycli sur le terminal.
※ Si vous souhaitez lire la version japonaise de cet article,
s'il vous plaît allez à celui-ci.
Préparation Configurons mycli !
Qu'est-ce que mycli de toute façon ?
mycli est une interface CLI pour les systèmes de gestion de bases de données courants tels que MySQL (et MariaDB).
※mycli signifie client de base de données MySQL.
Alors, qu'est-ce qui vous fait plaisir d'utiliser mycli ?
La meilleure partie est que la complétion facilite la saisie de commandes sur le terminal et réduit les fautes de frappe.
- Les commandes de base seront complétées.
- Les noms de tableau et d'autres suggestions de complétion seront affichés.
- Facile à voir avec les paramètres de couleur.
La capture d'écran ci-dessus montre l'écran de connexion à l'aide de la commande mysql normale. C'est difficile à voir et la complétion de la commande ne fonctionne pas.
Voici une capture d'écran de la connexion avec la commande mycli. Il est coloré et a une belle liste de candidats !
Installer mycli
Vous pouvez installer mycli par homebrew
ou pip
.
-- If you're Mac user
$ brew update
$ brew install mycli
-- If you're not
$ pip install mycli
Après cela, vérifiez mycli installé avec succès.
$ mycli --version
Version: 1.21.1
Configurez les paramètres, la couleur, les raccourcis clavier, etc. de mycli
Nous allons changer le fichier de configuration ~/.myclirc
en vous référant au site officiel 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
Essayons de peaufiner MariaDB (MySQL) avec mycli.
Se connecter à la base de données (base de données)
Si vous n'avez pas encore créé de base de données ou si vous ne vous souvenez pas du type de base de données que vous aviez, omettez le nom de la base de données et essayez la "Vérifier la liste des bases de données" suivante.
$ mycli -u(USER_NAME) -p(PASSWORD) [DATABASE_NAME]
-- example
$ mycli -uroot -pBARBAR foo_db
Vérifier la liste des bases de données
> SHOW DATABASES;
Créer une base de données
> CREATE DATABASE IF NOT EXISTS test;
Supprimer la base de données
> DROP DATABASE IF EXISTS test;
Vérifiez le nom d'hôte de la destination de connexion.
> SHOW VARIABLES LIKE 'hostname';
Créer un tableau
La requête suivante créera une table comme celle-ci.
Voici à quoi ressemble la relation (créée par 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)
);
Afficher la liste des tableaux
> SHOW TABLES;
Vérifier la structure du tableau
-- DESCRIBE is a synonym for EXPLAIN.
> DESCRIBE TABLE_NAME;
-- example
> DESCRIBE members;
Afficher la requête de création de table
Vous pouvez obtenir des informations plus détaillées que les instructions DESCRIBE à partir de la requête suivante.
> SHOW CREATE TABLE TABLE_NAME;
Supprimer le tableau
> DROP TABLE IF EXISTS TABLE_NAME
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
Vérifier l'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 |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
Les significations des indications ci-dessus sont les suivantes.
Élément | Description |
---|---|
Tableau | Nom du tableau |
Non_unique | 0 si l'index ne peut pas contenir de doublons, 1 s'il le peut. |
Nom_clé | Nom d'index si cet index est une clé primaire, le nom de la clé est toujours PRIMARY |
Seq_in_index | Le numéro de séquence de colonne dans l'index, à partir de 1. |
Column_name | Nom de la colonne |
Collation | Comment la colonne est triée ; dans MySQL, c'est soit "A" (ascendant) soit NULL (non trié) |
Cardinalité | Il fait référence aux types de valeurs qu'une colonne peut prendre. Plus la cardinalité est élevée, plus il est probable que MySQL utilisera cet index lors d'une jointure. |
Sous_partie | Si la colonne n'est que partiellement indexée, le nombre de caractères indexés. NULL si toute la colonne est indexée. |
Emballé | Indique comment la clé sera compressée. NULL s'il n'est pas compressé. |
NULL | Si cette colonne peut contenir des valeurs NULL, alors YES est utilisé ; sinon, '' est utilisé. |
Index_type | Méthode d'indexation utilisée (BTREE、FULLTEXT、HASH、RTREE) |
Commentaire | Informations sur cet index (par exemple, désactivé si l'index est désactivé) |
Index_comment | Tout commentaire fourni pour l'index dans l'attribut COMMENT lors de la création de l'index. |
Ajouter un index à une colonne dans une table déjà créée
> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);
Supprimer l'index
> DROP INDEX INDEX_NAME ON TABLE_NAME;
-- Or that following is also OK
> ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;
Mettre à jour le commentaire de l'index
> 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";
Insérer des données
> 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');
Supprimer les données
> DELETE FROM TABLE_NAME;
-- example1
DELETE FROM members;
-- example2
DELETE FROM members WHERE id=3;
Sélectionner les données
> SELECT COLUMN_NAME, FROM TABLE_NAME;
-- example1
> SELECT id, name FROM members;
-- example2
> SELECT * FROM members;
-- example3
> SELECT * FROM members WHERE id=3;
+α Là où l'auteur s'est retrouvé coincé une fois.
Colonnes avec AUTO_INCREMENT
la contrainte doit être définie sur la clé.
Ajoutons des index et définissons 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')
Impossible de DROP INDEX
Vérifier un index suivant en utilisant SHOW INDEX
, et essayez de supprimer PRIMARY
mais,,,
> 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")
La raison en est que le nom d'index de la clé primaire est toujours PRIMARY, mais PRIMARY est un mot réservé, vous devez donc le spécifier sous la forme d'un identifiant entre guillemets, sinon une erreur se produira. Cela fonctionnera si vous l'incluez dans un backquote comme suit
> ALTER TABLE members DROP INDEX `PRIMARY`;
Remarque :vous ne pouvez pas DROP la KEY d'une colonne qui n'a qu'une seule KEY car AUTO_INCREMENT
est défini.
Référence
document officiel mycli
MyCLI – Un client MySQL/MariaDB avec auto-complétion et coloration syntaxique / TecMint