Doelgroep voor dit artikel
-
MariaDB (of MySQL) al geïnstalleerd
-
Ken wat SQL
Als je hebt gehoord vanSELECT
enINSERT
, het zou goed moeten komen. -
Wil je spelen met de DB met behulp van de CLI (het zwarte scherm van de terminal)
Als u een volledige database wilt gebruiken, is het gemakkelijker om een GUI zoals Sequel Pro te gebruiken, maar als u alleen de database wilt aanraken, is het gemakkelijker om de mycli op terminal te gebruiken.
※ Als je de Japanse versie van dit artikel wilt lezen,
ga alsjeblieft naar deze.
Voorbereiding Laten we mycli opzetten!
Wat is mycli eigenlijk?
mycli is een CLI-interface voor veelgebruikte DB-beheersystemen zoals MySQL (en MariaDB).
※mycli staat voor MySQL db client.
Dus, wat ben je blij met het gebruik van mycli?
Het beste is dat de voltooiing het gemakkelijker maakt om commando's op de terminal te typen en typefouten te verminderen.
- Basisopdrachten worden aangevuld.
- Tabelnamen en andere suggesties voor aanvullingen worden weergegeven.
- Eenvoudig te zien met kleurinstellingen.
De bovenstaande schermafbeelding toont het verbindingsscherm met behulp van de normale mysql-opdracht. Het is moeilijk te zien en het voltooien van de opdracht werkt niet.
Hier is een screenshot van de verbinding met het mycli-commando. Het is gekleurd en heeft een mooie kandidatenlijst!
Installeer mycli
U kunt mycli installeren door homebrew
of pip
.
-- If you're Mac user
$ brew update
$ brew install mycli
-- If you're not
$ pip install mycli
Controleer daarna of mycli succesvol is geïnstalleerd.
$ mycli --version
Version: 1.21.1
Configureer mycli's instelling, kleur, sneltoetsen etc,,,
We zullen het configuratiebestand ~/.myclirc
. wijzigen door te verwijzen naar de officiële mycli-website.
# 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
Laten we proberen MariaDB (MySQL) aan te passen met mycli.
Verbinden met DB(DataBase)
Als u nog geen DB hebt gemaakt, of als u niet meer weet wat voor soort DB u had, laat dan de databasenaam weg en probeer de volgende "Controleer DB-lijst".
$ mycli -u(USER_NAME) -p(PASSWORD) [DATABASE_NAME]
-- example
$ mycli -uroot -pBARBAR foo_db
Controleer DB-lijst
> SHOW DATABASES;
DB maken
> CREATE DATABASE IF NOT EXISTS test;
DB verwijderen
> DROP DATABASE IF EXISTS test;
Controleer de hostnaam van de verbindingsbestemming.
> SHOW VARIABLES LIKE 'hostname';
Tabel maken
Met de volgende query wordt een tabel als deze gemaakt.
Zo ziet de relatie eruit (gemaakt door 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)
);
Toon tabellijst
> SHOW TABLES;
Controleer tabelstructuur
-- DESCRIBE is a synonym for EXPLAIN.
> DESCRIBE TABLE_NAME;
-- example
> DESCRIBE members;
Toon Table's Create-query
U kunt meer gedetailleerde informatie krijgen dan DESCRIBE-instructies uit de volgende query.
> SHOW CREATE TABLE TABLE_NAME;
Tabel verwijderen
> DROP TABLE IF EXISTS TABLE_NAME
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
Controleer 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 |
+---------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------------------+
De betekenissen van de bovenstaande aanduidingen zijn als volgt.
Artikel | Beschrijving |
---|---|
Tabel | Tabelnaam |
Niet_uniek | 0 als de index geen duplicaten kan bevatten, 1 als dat wel kan. |
Sleutelnaam | Indexnaam als deze index de primaire sleutel is, is de naam van de sleutel altijd PRIMAIRE |
Seq_in_index | Het kolomvolgnummer in de index, beginnend bij 1. |
Kolomnaam | Kolomnaam |
Collatie | Hoe de kolom is gesorteerd; in MySQL is dit ofwel "A" (oplopend) of NULL (ongesorteerd) |
Kardinaliteit | Het verwijst naar de soorten waarden die een kolom kan aannemen. Hoe hoger de kardinaliteit, hoe waarschijnlijker het is dat MySQL deze index zal gebruiken bij het uitvoeren van een join. |
Sub_part | Als de kolom slechts gedeeltelijk is geïndexeerd, het aantal geïndexeerde tekens. NULL als de hele kolom is geïndexeerd. |
Verpakt | Geeft aan hoe de sleutel wordt verpakt. NULL als het niet verpakt is. |
NULL | Als deze kolom NULL-waarden kan bevatten, wordt YES gebruikt; anders wordt '' gebruikt. |
Index_type | Gebruikte indexeringsmethode (BTREE、FULLTEXT、HASH、RTREE) |
Commentaar | Informatie over deze index (bijv. uitgeschakeld als de index is uitgeschakeld) |
Index_comment | Elke opmerking die is opgegeven voor de index in het COMMENT-attribuut toen de index werd gemaakt. |
Index toevoegen aan een kolom in een tabel die al is gemaakt
> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);
Index verwijderen
> DROP INDEX INDEX_NAME ON TABLE_NAME;
-- Or that following is also OK
> ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;
Indexopmerking bijwerken
> 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";
Gegevens invoegen
> 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');
Gegevens verwijderen
> DELETE FROM TABLE_NAME;
-- example1
DELETE FROM members;
-- example2
DELETE FROM members WHERE id=3;
Selecteer gegevens
> SELECT COLUMN_NAME, FROM TABLE_NAME;
-- example1
> SELECT id, name FROM members;
-- example2
> SELECT * FROM members;
-- example3
> SELECT * FROM members WHERE id=3;
+α Waar de auteur ooit vast kwam te zitten.
Kolommen met AUTO_INCREMENT
beperking moet worden ingesteld op sleutel.
Laten we indexen toevoegen en PRIMARY KEY
instellen .
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 niet DROP INDEX
Controleer een volgende index met behulp van SHOW INDEX
en probeer PRIMARY
. te verwijderen maar,,,
> 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")
De reden is dat de indexnaam van de primaire sleutel altijd PRIMARY is, maar PRIMARY is een gereserveerd woord, dus u moet het specificeren als een identificatie tussen aanhalingstekens, anders treedt er een fout op. Het werkt als je het als volgt in een backquote plaatst:
> ALTER TABLE members DROP INDEX `PRIMARY`;
Opmerking:u kunt de SLEUTEL van een kolom die maar één SLEUTEL heeft niet DROP omdat AUTO_INCREMENT
is ingesteld.
Referentie
mycli officieel document
MyCLI – Een MySQL/MariaDB-client met automatische aanvulling en syntaxismarkering / TecMint