Zielgruppe für diesen Artikel
-
MariaDB (oder MySQL) bereits installiert
-
Kennen Sie etwas SQL
Wenn Sie vonSELECT
gehört haben undINSERT
, 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