Målgrupp för den här artikeln
-
MariaDB (eller MySQL) redan installerad
-
Kan lite SQL
Om du har hört talas omSELECT
ochINSERT
, 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