sql >> Base de Datos >  >> RDS >> MariaDB

¡Use mycli y aprenda MariaDB/MySQL cómodamente en una terminal!

Público objetivo de este artículo

  • MariaDB (o MySQL) ya instalado

  • Saber algo de SQL
    Si has oído hablar de SELECT y INSERT , deberías estar bien.

  • Quiere jugar con la base de datos usando la CLI (la pantalla negra de la terminal)
    Si desea operar una base de datos a gran escala, es más fácil usar una GUI como Sequel Pro, pero si solo desea tocar la base de datos, es más fácil usar mycli en la terminal.

※ Si desea leer la versión japonesa de este artículo,
por favor ve a este.

Preparación ¡Vamos a configurar mycli!

¿Qué es mycli de todos modos?

mycli es una interfaz CLI para sistemas de administración de base de datos comunes como MySQL (y MariaDB).
※mycli significa cliente de base de datos MySQL.

Entonces, ¿qué te hace feliz de usar mycli?

La mejor parte es que la finalización facilita escribir comandos en la terminal y reduce los errores tipográficos.

  • Se complementarán los comandos básicos.
  • Se mostrarán los nombres de las tablas y otras sugerencias de finalización.
  • Fácil de ver con la configuración de color.


La captura de pantalla anterior muestra la pantalla de conexión usando el comando mysql normal. Es difícil de ver y la finalización del comando no funciona.


Aquí hay una captura de pantalla de la conexión con el comando mycli. ¡Es de colores y tiene una buena lista de candidatos!

Instalar mycli

Puede instalar mycli por homebrew o pip .

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

Después de eso, verifique que mycli se haya instalado correctamente.

$ mycli --version
Version: 1.21.1

Configure la configuración, el color, las combinaciones de teclas, etc. de mycli

Cambiaremos el archivo de configuración ~/.myclirc consultando el sitio web oficial de 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

Intentemos ajustar MariaDB (MySQL) con mycli.

Conectarse a la base de datos (base de datos)

Si aún no ha creado una base de datos, o si no recuerda qué tipo de base de datos tenía, omita el nombre de la base de datos e intente lo siguiente "Verificar lista de base de datos".

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

-- example
$ mycli -uroot -pBARBAR foo_db

Comprobar la lista de bases de datos

> SHOW DATABASES;

Crear base de datos

> CREATE DATABASE IF NOT EXISTS test;

Eliminar base de datos

> DROP DATABASE IF EXISTS test;

Compruebe el nombre de host del destino de la conexión.

> SHOW VARIABLES LIKE 'hostname';

Crear tabla

La siguiente consulta creará una tabla como esta.

Así es como se ve la relación (creada 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 tablas

> SHOW TABLES;

Comprobar la estructura de la tabla

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

-- example
> DESCRIBE members;

Mostrar consulta de creación de tabla

Puede obtener información más detallada que las declaraciones DESCRIBE de la siguiente consulta.

> SHOW CREATE TABLE TABLE_NAME;

Eliminar tabla

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

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

Los significados de las indicaciones anteriores son los siguientes.

Artículo Descripción
Tabla Nombre de la tabla
No_único 0 si el índice no puede contener duplicados, 1 si puede.
Nombre_clave Nombre del índice si este índice es clave principal, el nombre de la clave siempre es PRIMARIO
Seq_in_index El número de secuencia de la columna en el índice, comenzando desde 1.
Nombre_columna Nombre de columna
Colección Cómo se ordena la columna; en MySQL, esto es "A" (ascendente) o NULL (sin clasificar)
Cardinalidad Se refiere a los tipos de valores que puede tomar una columna. Cuanto mayor sea la cardinalidad, más probable es que MySQL utilice este índice al realizar una combinación.
Sub_parte Si la columna está indexada solo parcialmente, el número de caracteres indexados. NULL si se indexa toda la columna.
Empacado Indica cómo se empaquetará la clave. NULL si no está empaquetado.
NULO Si esta columna puede contener valores NULL, entonces se usa SÍ; de lo contrario, se utiliza ''.
Tipo_índice Método de indexación utilizado (BTREE、FULLTEXT、HASH、RTREE)
Comentario Información sobre este índice (por ejemplo, deshabilitado si el índice está deshabilitado)
Comentario_índice Cualquier comentario proporcionado para el índice en el atributo COMENTARIO cuando se creó el índice.

Agregar índice a una columna en una tabla que ya se ha creado

> ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(COLUMN_NAME);

Eliminar índice

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

Actualizar comentario de í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";

Insertar datos

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

Eliminar datos

> DELETE FROM TABLE_NAME;

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

Seleccionar datos

> SELECT COLUMN_NAME, FROM TABLE_NAME;

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

+α Donde el autor una vez se atascó.

Columnas con AUTO_INCREMENT la restricción debe establecerse en clave.

Agreguemos índices y configuremos 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')

No se puede DROP INDEX

Verifique un índice siguiente usando by SHOW INDEX e intente eliminar PRIMARY pero,,,

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

El motivo es que el nombre de índice de la clave principal siempre es PRIMARIO, pero PRIMARIO es una palabra reservada, por lo que debe especificarlo como un identificador entrecomillado o, de lo contrario, se producirá un error. Funcionará si lo incluye entre comillas inversas de la siguiente manera

> ALTER TABLE members DROP INDEX `PRIMARY`;

Nota:no puede SOLTAR la CLAVE de una columna que solo tiene una CLAVE porque AUTO_INCREMENT está configurado.

Referencia

documento oficial mycli
MyCLI:un cliente MySQL/MariaDB con finalización automática y resaltado de sintaxis / TecMint