MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Use mycli e aprenda MariaDB/MySQL confortavelmente em um terminal!

Público-alvo deste artigo


  • MariaDB (ou MySQL) já instalado

  • Conheça um pouco de SQL
    Se você já ouviu falar de SELECT e INSERT , você deve estar bem.

  • Quer brincar com o DB usando o CLI (a tela preta do terminal)
    Se você deseja operar um banco de dados em escala real, é mais fácil usar uma GUI como o Sequel Pro, mas se você deseja apenas tocar no banco de dados, é mais fácil usar o terminal mycli on.

※ Se você quiser ler a versão japonesa deste artigo,
por favor, vá para este.

Preparação Vamos configurar o mycli!

O que é mycli afinal?


mycli é uma interface CLI para sistemas comuns de gerenciamento de banco de dados, como MySQL (e MariaDB).
※mycli significa cliente db MySQL.

Então, por que você está feliz em usar mycli?


A melhor parte é que o preenchimento facilita a digitação de comandos no terminal e reduz erros de digitação.
  • Os comandos básicos serão complementados.
  • Os nomes das tabelas e outras sugestões de preenchimento serão exibidos.
  • Fácil de ver com configurações de cores.


A captura de tela acima mostra a tela de conexão usando o comando mysql normal. É difícil de ver e a conclusão do comando não funciona.


Aqui está uma captura de tela da conexão com o comando mycli. É colorido e tem uma bela lista de candidatos!

Instalar mycli


Você pode instalar o mycli por homebrew ou pip .

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

Depois disso, verifique o mycli instalado com sucesso.

$ mycli --version
Version: 1.21.1

Configure a configuração do mycli, cor, atalhos de teclado etc,,,


Vamos alterar o arquivo de configuração ~/.myclirc consultando o site oficial do mycli.

# 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

Vamos tentar ajustar o MariaDB (MySQL) com mycli.

Conectar ao banco de dados (Base de dados)


Se você ainda não criou um banco de dados, ou se não se lembra de que tipo de banco de dados você tinha, omita o nome do banco de dados e tente o seguinte "Verificar lista de banco de dados".

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

-- example
$ mycli -uroot -pBARBAR foo_db

Verifique a lista de banco de dados

> SHOW DATABASES;

Criar banco de dados

> CREATE DATABASE IF NOT EXISTS test;

Excluir banco de dados

> DROP DATABASE IF EXISTS test;

Verifique o nome do host do destino da conexão.

> SHOW VARIABLES LIKE 'hostname';

Criar Tabela


A consulta a seguir criará uma tabela como esta.



Veja como é a relação (criada por 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)
);

Mostrar lista de tabelas

> SHOW TABLES;

Verifique a estrutura da tabela

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

-- example
> DESCRIBE members;

Mostrar consulta de criação da tabela


Você pode obter informações mais detalhadas do que as instruções DESCRIBE da consulta a seguir.

> SHOW CREATE TABLE TABLE_NAME;

Excluir tabela

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

Verifique o índice

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

Os significados das indicações acima são os seguintes.
Item Descrição
Tabela Nome da tabela
Não_único 0 se o índice não puder conter duplicatas, 1 se puder.
Key_name Nome do índice se este índice for chave primária, o nome da chave será sempre PRIMARY
Seq_in_index O número de sequência da coluna no índice, começando em 1.
Column_name Nome da coluna
Agrupamento Como a coluna é classificada; no MySQL, isso é "A" (ascendente) ou NULL (não classificado)
Cardinalidade Refere-se aos tipos de valores que uma coluna pode assumir. Quanto maior a cardinalidade, mais provável é que o MySQL use este índice ao realizar uma junção.
Sub_parte Se a coluna estiver apenas parcialmente indexada, o número de caracteres indexados. NULL se a coluna inteira estiver indexada.
Embalado Indica como a chave será empacotada. NULL se não estiver compactado.
NULO Se esta coluna pode conter valores NULL, então YES é usado; caso contrário, '' é usado.
Index_type Método de indexação usado (BTREE、FULLTEXT、HASH、RTREE)
Comentário Informações sobre este índice (por exemplo, desabilitado se o índice estiver desabilitado)
Index_comment Qualquer comentário fornecido para o índice no atributo COMMENT quando o índice foi criado.

Adicionar índice a uma coluna em uma tabela que já foi criada

> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);

Excluir índice

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

Atualizar comentário do índice

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

Inserir dados

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

Excluir dados

> DELETE FROM TABLE_NAME;

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

Selecionar dados

> SELECT COLUMN_NAME, FROM TABLE_NAME;

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

+α Onde o autor ficou preso.

Colunas com AUTO_INCREMENT a restrição deve ser definida como chave.


Vamos adicionar índices e definir 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')

Não é possível DROP INDEX


Verifique um índice a seguir usando SHOW INDEX e tente excluir PRIMARY mas,,,


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

A razão é que o nome do índice da chave primária é sempre PRIMARY, mas PRIMARY é uma palavra reservada, então você deve especificá-lo como um identificador entre aspas ou então ocorrerá um erro. Funcionará se você colocá-lo entre aspas da seguinte maneira

> ALTER TABLE members DROP INDEX `PRIMARY`;

Nota:você não pode DROP a KEY de uma coluna que tem apenas uma KEY porque AUTO_INCREMENT está definido.

Referência


documento oficial mycli
MyCLI – Um cliente MySQL/MariaDB com preenchimento automático e realce de sintaxe / TecMint