MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Nutzen Sie mycli und lernen Sie MariaDB/MySQL bequem in einem Terminal!

Zielgruppe für diesen Artikel

  • MariaDB (oder MySQL) bereits installiert

  • Kennen Sie etwas SQL
    Wenn Sie von SELECT gehört haben und INSERT , es sollte dir gut gehen.

  • Mit der DB über die CLI herumspielen wollen (der schwarze Bildschirm des Terminals)
    Wenn Sie eine vollständige DB betreiben möchten, ist es einfacher, eine GUI wie Sequel Pro zu verwenden, aber wenn Sie die DB nur berühren möchten, ist es einfacher, mycli on terminal zu verwenden.

※ Wenn Sie die japanische Version dieses Artikels lesen möchten,
Bitte gehen Sie zu diesem.

Vorbereitung Richten wir mycli ein!

Was ist mycli überhaupt?

mycli ist eine CLI-Schnittstelle für gängige DB-Verwaltungssysteme wie MySQL (und MariaDB).
※mycli steht für MySQL db client.

Also, was freut Sie an der Verwendung von mycli?

Das Beste daran ist, dass die Vervollständigung das Eingeben von Befehlen auf dem Terminal erleichtert und Tippfehler reduziert.

  • Grundlegende Befehle werden ergänzt.
  • Tabellennamen und andere Vervollständigungsvorschläge werden angezeigt.
  • Einfach zu sehen mit Farbeinstellungen.


Der obige Screenshot zeigt den Verbindungsbildschirm mit dem normalen mysql-Befehl. Es ist schwer zu erkennen und die Befehlsvervollständigung funktioniert nicht.


Hier ist ein Screenshot der Verbindung mit dem Befehl mycli. Es ist farbig und hat eine nette Kandidatenliste!

mycli installieren

Sie können mycli per homebrew installieren oder pip .

-- If you're Mac user
$ brew update
$ brew install mycli
-- If you're not
$ pip install mycli

Überprüfen Sie danach, ob mycli erfolgreich installiert wurde.

$ mycli --version
Version: 1.21.1

Konfigurieren Sie mycli's Einstellung, Farbe, Tastenbelegung etc,,,

Wir ändern die Konfigurationsdatei ~/.myclirc indem Sie auf die offizielle mycli-Website verweisen.

# 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

Lassen Sie uns versuchen, MariaDB (MySQL) mit mycli zu optimieren.

Mit DB(DataBase) verbinden

Wenn Sie noch keine DB erstellt haben oder sich nicht erinnern, welche Art von DB Sie hatten, lassen Sie den Datenbanknamen weg und versuchen Sie das folgende "Check DB List".

$ mycli -u(USER_NAME) -p(PASSWORD) [DATABASE_NAME]

-- example
$ mycli -uroot -pBARBAR foo_db

DB-Liste prüfen

> SHOW DATABASES;

DB erstellen

> CREATE DATABASE IF NOT EXISTS test;

DB löschen

> DROP DATABASE IF EXISTS test;

Überprüfen Sie den Hostnamen des Verbindungsziels.

> SHOW VARIABLES LIKE 'hostname';

Tabelle erstellen

Die folgende Abfrage erstellt eine Tabelle wie diese.

So sieht die Beziehung aus (erstellt von 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)
);

Tabellenliste anzeigen

> SHOW TABLES;

Überprüfen Sie die Tabellenstruktur

-- DESCRIBE is a synonym for EXPLAIN.
> DESCRIBE TABLE_NAME;

-- example
> DESCRIBE members;

Tabellenerstellungsabfrage anzeigen

Aus der folgenden Abfrage erhalten Sie detailliertere Informationen als die DESCRIBE-Anweisungen.

> SHOW CREATE TABLE TABLE_NAME;

Tabelle löschen

> DROP TABLE IF EXISTS TABLE_NAME
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!

Index prüfen

> 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 |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+

Die Bedeutungen der obigen Angaben sind wie folgt.

Element Beschreibung
Tabelle Tabellenname
Non_unique 0, wenn der Index keine Duplikate enthalten kann, 1, wenn er kann.
Schlüsselname Indexname Wenn dieser Index ein Primärschlüssel ist, ist der Name des Schlüssels immer PRIMARY
Seq_in_index Die Spaltensequenznummer im Index, beginnend bei 1.
Spaltenname Spaltenname
Sammlung Wie die Spalte sortiert wird; in MySQL ist dies entweder "A" (aufsteigend) oder NULL (unsortiert)
Kardinalität Bezieht sich auf die Arten von Werten, die eine Spalte annehmen kann. Je höher die Kardinalität, desto wahrscheinlicher ist es, dass MySQL diesen Index beim Durchführen eines Joins verwendet.
Sub_part Wenn die Spalte nur teilweise indiziert ist, die Anzahl der indizierten Zeichen. NULL, wenn die gesamte Spalte indiziert ist.
Verpackt Gibt an, wie der Schlüssel gepackt wird. NULL, wenn es nicht gepackt ist.
NULL Wenn diese Spalte NULL-Werte enthalten kann, wird YES verwendet; andernfalls wird '' verwendet.
Indextyp Verwendete Indizierungsmethode (BTREE、FULLTEXT、HASH、RTREE)
Kommentar Informationen zu diesem Index (z. B. deaktiviert, wenn der Index deaktiviert ist)
Index_Kommentar Jeder Kommentar, der für den Index im COMMENT-Attribut bereitgestellt wurde, als der Index erstellt wurde.

Index zu einer Spalte in einer bereits erstellten Tabelle hinzufügen

> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);

Index löschen

> DROP INDEX INDEX_NAME ON TABLE_NAME;
-- Or that following is also OK
> ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;

Indexkommentar aktualisieren

> 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";

Daten einfügen

> 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');

Daten löschen

> DELETE FROM TABLE_NAME;

-- example1
DELETE FROM members;
-- example2
DELETE FROM members WHERE id=3;

Daten auswählen

> SELECT COLUMN_NAME, FROM TABLE_NAME;

-- example1
> SELECT id, name FROM members;
-- example2
> SELECT * FROM members;
-- example3
> SELECT * FROM members WHERE id=3;

+α Wo der Autor einmal stecken geblieben ist.

Spalten mit AUTO_INCREMENT Einschränkung muss auf Schlüssel gesetzt werden.

Lassen Sie uns Indizes hinzufügen und PRIMARY KEY festlegen .

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')

DROP INDEX kann nicht ausgeführt werden

Überprüfen Sie einen folgenden Index mit SHOW INDEX , und versuchen Sie, PRIMARY zu löschen sondern,,,

> 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")

Der Grund dafür ist, dass der Indexname des Primärschlüssels immer PRIMARY ist, PRIMARY jedoch ein reserviertes Wort ist, sodass Sie es als Bezeichner in Anführungszeichen angeben müssen, da sonst ein Fehler auftritt. Es funktioniert, wenn Sie es wie folgt in ein Backquote einschließen

> ALTER TABLE members DROP INDEX `PRIMARY`;

Hinweis:Sie können den SCHLÜSSEL einer Spalte, die nur einen SCHLÜSSEL hat, nicht DROPEN, weil AUTO_INCREMENT eingestellt ist.

Referenz

mycli offizielles Dokument
MyCLI – Ein MySQL/MariaDB-Client mit Autovervollständigung und Syntax-Highlighting / TecMint