sql >> Databasteknik >  >> RDS >> MariaDB

Använd mycli och lär dig MariaDB/MySQL bekvämt i en terminal!

Målgrupp för den här artikeln

  • MariaDB (eller MySQL) redan installerad

  • Kan lite SQL
    Om du har hört talas om SELECT och INSERT , du borde klara dig.

  • Vill du leka med DB:n med CLI (terminalens svarta skärm)
    Om du vill använda en fullskalig DB är det lättare att använda ett GUI som Sequel Pro, men om du bara vill röra vid DB är det lättare att använda mycli på terminalen.

※ Om du vill läsa den japanska versionen av denna artikel,
snälla gå till den här.

Förberedelser Låt oss ställa in mycli!

Vad är mycli egentligen?

mycli är ett CLI-gränssnitt för vanliga DB-hanteringssystem som MySQL (och MariaDB).
※mycli står för MySQL db-klient.

Så, vad är du glad över att använda mycli?

Det bästa är att kompletteringen gör det lättare att skriva kommandon på terminalen och minska stavfel.

  • Grundläggande kommandon kommer att kompletteras.
  • Tabellnamn och andra kompletteringsförslag kommer att visas.
  • Lätt att se med färginställningar.


Skärmdumpen ovan visar anslutningsskärmen med det vanliga mysql-kommandot. Det är svårt att se och slutförandet av kommandot fungerar inte.


Här är en skärmdump av kopplingen till mycli-kommandot. Den är färgad och har en fin lista med kandidater!

Installera mycli

Du kan installera mycli med homebrew eller pip .

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

Efter det, kontrollera att mycli har installerats framgångsrikt.

$ mycli --version
Version: 1.21.1

Konfigurera myclis inställning, färg, tangentbindningar etc,,,

Vi kommer att ändra konfigurationsfilen ~/.myclirc genom att hänvisa till den officiella myclis hemsida.

# 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

Låt oss försöka justera MariaDB (MySQL) med mycli.

Anslut till DB(DataBase)

Om du inte har skapat en DB ännu, eller om du inte kommer ihåg vilken typ av DB du hade, utelämna databasnamnet och försök med följande "Check DB List".

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

-- example
$ mycli -uroot -pBARBAR foo_db

Kontrollera DB-listan

> SHOW DATABASES;

Skapa DB

> CREATE DATABASE IF NOT EXISTS test;

Ta bort DB

> DROP DATABASE IF EXISTS test;

Kontrollera värdnamnet för anslutningsdestinationen.

> SHOW VARIABLES LIKE 'hostname';

Skapa tabell

Följande fråga kommer att skapa en tabell som denna.

Så här ser relationen ut (skapad av 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)
);

Visa tabelllista

> SHOW TABLES;

Kontrollera tabellstrukturen

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

-- example
> DESCRIBE members;

Visa tabellens Skapa-fråga

Du kan få mer detaljerad information än DESCRIBE-satser från följande fråga.

> SHOW CREATE TABLE TABLE_NAME;

Ta bort tabell

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

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

Innebörden av ovanstående indikationer är följande.

Artikel Beskrivning
Tabell Tabellnamn
Icke_unik 0 om indexet inte kan innehålla dubbletter, 1 om det kan.
Nyckelnamn Indexnamn om detta index är primärnyckel är nyckelns namn alltid PRIMÄR
Seq_in_index Kolumnens sekvensnummer i indexet, med start från 1.
Kolumnnamn Kolumnnamn
Sortering Hur kolumnen är sorterad; i MySQL är detta antingen "A" (stigande) eller NULL (osorterat)
Kardinalitet Det hänvisar till de typer av värden som en kolumn kan ta. Ju högre kardinalitet, desto mer sannolikt är det att MySQL kommer att använda detta index när man utför en join.
Sub_part Om kolumnen endast är delvis indexerad, antalet indexerade tecken. NULL om hela kolumnen är indexerad.
Packat Indikerar hur nyckeln kommer att packas. NULL om den inte är packad.
NULL Om denna kolumn kan innehålla NULL-värden, används YES; annars används ''.
Index_type Använd indexeringsmetod (BTREE、FULLTEXT、HASH、RTREE)
Kommentar Information om detta index (t.ex. inaktiverat om indexet är inaktiverat)
Index_kommentar Alla kommentarer som angavs för indexet i COMMENT-attributet när indexet skapades.

Lägg till index i en kolumn i en tabell som redan har skapats

> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);

Ta bort index

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

Uppdatera indexkommentar

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

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

Radera data

> DELETE FROM TABLE_NAME;

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

Välj data

> SELECT COLUMN_NAME, FROM TABLE_NAME;

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

+α Där författaren en gång fastnade.

Kolumner med AUTO_INCREMENT begränsning måste ställas in på nyckel.

Låt oss lägga till index och ställa in 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 inte DROP INDEX

Kontrollera ett följande index med SHOW INDEX , och försök ta bort 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")

Anledningen är att indexnamnet på primärnyckeln alltid är PRIMÄR, men PRIMÄR är ett reserverat ord, så du måste ange det som en citerad identifierare, annars uppstår ett fel. Det fungerar om du bifogar det i ett citat enligt följande

> ALTER TABLE members DROP INDEX `PRIMARY`;

Obs! Du kan inte SLAPPA NYCKELN för en kolumn som bara har en NYCKEL eftersom AUTO_INCREMENT är inställd.

Referens

mycli officiella dokument
MyCLI – En MySQL/MariaDB-klient med automatisk komplettering och syntaxmarkering / TecMint


  1. SQLite AVG

  2. Rådgivande lås eller NOWAIT för att slippa vänta på låsta rader?

  3. Olika sätt att övervaka SQL Server AlwaysOn-tillgänglighetsgrupper

  4. SQL Server Konvertera heltal till binär sträng