sql >> Database teknologi >  >> RDS >> MariaDB

Brug mycli og lær MariaDB/MySQL komfortabelt i en terminal!

Målgruppe for denne artikel

  • MariaDB (eller MySQL) allerede installeret

  • Kender noget SQL
    Hvis du har hørt om SELECT og INSERT , du burde have det godt.

  • Vil du lege med DB'en ved hjælp af CLI (terminalens sorte skærm)
    Hvis du vil betjene en fuldskala DB, er det nemmere at bruge en GUI såsom Sequel Pro, men hvis du bare vil røre ved DB, er det lettere at bruge mycli på terminalen.

※ Hvis du vil læse den japanske version af denne artikel,
gå venligst til denne.

Forberedelse Lad os sætte mycli op!

Hvad er mycli alligevel?

mycli er en CLI-grænseflade til almindelige DB-administrationssystemer såsom MySQL (og MariaDB).
※mycli står for MySQL db-klient.

Så hvad er du glad for at bruge mycli?

Det bedste er, at færdiggørelsen gør det nemmere at skrive kommandoer på terminalen og reducere stavefejl.

  • Grundlæggende kommandoer vil blive suppleret.
  • Tabelnavne og andre forslag til færdiggørelse vil blive vist.
  • Nem at se med farveindstillinger.


Skærmbilledet ovenfor viser forbindelsesskærmen ved hjælp af den normale mysql-kommando. Det er svært at se, og kommandoudførelsen virker ikke.


Her er et skærmbillede af forbindelsen med mycli-kommandoen. Den er farvet og har en fin liste over kandidater!

Installer mycli

Du kan installere mycli med homebrew eller pip .

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

Derefter skal du kontrollere, at mycli er installeret.

$ mycli --version
Version: 1.21.1

Konfigurer myclis indstilling, farve, nøglebindinger osv.,,,

Vi vil ændre konfigurationsfilen ~/.myclirc ved at henvise til den officielle mycli hjemmeside.

# 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

Lad os prøve at justere MariaDB (MySQL) med mycli.

Opret forbindelse til DB(DataBase)

Hvis du ikke har oprettet en DB endnu, eller hvis du ikke kan huske, hvilken slags DB du havde, så udelad databasenavnet og prøv følgende "Check DB List".

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

-- example
$ mycli -uroot -pBARBAR foo_db

Tjek DB-liste

> SHOW DATABASES;

Opret DB

> CREATE DATABASE IF NOT EXISTS test;

Slet DB

> DROP DATABASE IF EXISTS test;

Tjek værtsnavnet på forbindelsesdestinationen.

> SHOW VARIABLES LIKE 'hostname';

Opret tabel

Følgende forespørgsel vil oprette en tabel som denne.

Sådan ser relationen ud (oprettet af 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)
);

Vis tabelliste

> SHOW TABLES;

Tjek tabelstruktur

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

-- example
> DESCRIBE members;

Vis tabels Opret-forespørgsel

Du kan få mere detaljerede oplysninger end DESCRIBE-udsagn fra følgende forespørgsel.

> SHOW CREATE TABLE TABLE_NAME;

Slet 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!

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

Betydningen af ​​ovenstående indikationer er som følger.

Vare Beskrivelse
Tabel Tabelnavn
Ikke_unik 0 hvis indekset ikke kan indeholde dubletter, 1 hvis det kan.
Nøglenavn Indeksnavn, hvis dette indeks er primærnøgle, er nøglenavnet altid PRIMÆR
Seq_in_index Kolonnens sekvensnummer i indekset, startende fra 1.
Kolonne_navn Kolonnenavn
Samling Hvordan kolonnen er sorteret; i MySQL er dette enten "A" (stigende) eller NULL (usorteret)
Kardinalitet Det refererer til de typer værdier, som en kolonne kan tage. Jo højere kardinalitet, jo mere sandsynligt er det, at MySQL vil bruge dette indeks, når der udføres en joinforbindelse.
Underdel Hvis kolonnen kun er delvist indekseret, antallet af indekserede tegn. NULL, hvis hele kolonnen er indekseret.
Pakket Indikerer, hvordan nøglen vil blive pakket. NULL, hvis den ikke er pakket.
NULL Hvis denne kolonne kan indeholde NULL-værdier, så bruges YES; ellers bruges ''.
Index_type Anvendt indekseringsmetode (BTREE、FULLTEXT、HASH、RTREE)
Kommentar Oplysninger om dette indeks (f.eks. deaktiveret, hvis indekset er deaktiveret)
Index_comment Enhver kommentar, der blev angivet til indekset i COMMENT-attributten, da indekset blev oprettet.

Tilføj indeks til en kolonne i en tabel, der allerede er oprettet

> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);

Slet indeks

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

Opdater indekskommentar

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

Indsæt data

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

Slet data

> DELETE FROM TABLE_NAME;

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

Vælg data

> SELECT COLUMN_NAME, FROM TABLE_NAME;

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

+α Hvor forfatteren engang gik i stå.

Kolonner med AUTO_INCREMENT begrænsning skal sættes til nøgle.

Lad os tilføje indekser og indstille 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')

Kan ikke DROP INDEX

Tjek et følgende indeks ved hjælp af SHOW INDEX , og prøv at slette PRIMARY men,,,

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

Årsagen er, at indeksnavnet på den primære nøgle altid er PRIMÆR, men PRIMÆR er et reserveret ord, så du skal angive det som en citeret identifikator, ellers vil der opstå en fejl. Det vil virke, hvis du vedlægger det i et backquote som følger

> ALTER TABLE members DROP INDEX `PRIMARY`;

Bemærk:du kan ikke SLIPPE NØGLEN for en kolonne, der kun har én NØGLE, fordi AUTO_INCREMENT er indstillet.

Reference

mycli officielle dokument
MyCLI – En MySQL/MariaDB-klient med autofuldførelse og syntaksfremhævning / TecMint


  1. SQL UDENLANDSKE NØGLE

  2. Forkert sortering/sortering/rækkefølge med mellemrum i Postgresql 9.4

  3. 911/112:En nødopkaldstjenestedatamodel

  4. Sådan falder du bordet i oracle