MariaDB базовые консольные команды Linux.

Ранее мы установили MariaDB на наш хост, когда разворачивали стек LEMP. Даже если вы предпочитаете работать с базой данных через графический интерфейс, как например PHPMyAdmin, знать базовый синтаксис SQL запросов необходимо. Запустим консоль MariaDB выполнив команду:
mariadb

Давайте создадим новую базу данных, но перед этим проверим какие базы уже есть у нас, обратите внимание, что каждый запрос завершается знаком ; так программа понимает, где конец запроса:

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.004 sec)

У нас сейчас есть только системные базы используемые для работы самой MariaDB, добавим пользовательскую базу для своих нужд. И после проверим, что база появилась в списке:

MariaDB [(none)]> CREATE DATABASE waky_test_db;
Query OK, 1 row affected (0.002 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| waky_test_db       |
+--------------------+
5 rows in set (0.003 sec)

База готова, но она пока пустая. Перейдем в нее и проверим содержит ли она таблицы:

MariaDB [(none)]> USE waky_test_db;
Database changed
MariaDB [waky_test_db]> SHOW TABLES;
Empty set (0.001 sec)

Ожидаемо, таблиц нет, значит надо создать. Используя движки для сайтов типа CMS WordPress вам не придется создавать таблицы вручную, однако это знание вам пригодится если понадобится например восстанавливать отдельные данные из бекапа.

MariaDB [waky_test_db]> CREATE TABLE waky_test_table (id INT PRIMARY KEY, title VARCHAR(50), description TEXT);
Query OK, 0 rows affected (0.009 sec)

MariaDB [waky_test_db]> SHOW TABLES;
+------------------------+
| Tables_in_waky_test_db |
+------------------------+
| waky_test_table        |
+------------------------+
1 row in set (0.002 sec)

Таблица состоит из столбцов — ключей, и строк — наборов конкретных значений. В данном случае мы создали таблицу с тремя столбцами id, title, description.
Столбец id имеет тип INT — может принимать только целочисленные значения, дополнительно мы этот столбец назначили первичным ключом, что создает уникальный индекс по этому столбцу.
Столбец title имеет тип VARCHAR — может содержать буквы, цифры, символы, должна быть задана максимальная длина, в нашем случае — 50 символов.
Столбец description имеет тип TEXT — может содержать буквы, цифры, символы, длина всегда максимальная — 65535 символов.

Когда работаешь с таблицами, необходимо представлять их структуру. Чтобы узнать какие столбцы есть в таблице и какой тип данных для них используется можно посмотреть описание таблицы:

MariaDB [waky_test_db]> DESCRIBE waky_test_table;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id          | int(11)     | NO   | PRI | NULL    |       |
| title       | varchar(50) | YES  |     | NULL    |       |
| description | text        | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
3 rows in set (0.006 sec)

Добавим какие-нибудь данные в нашу новую таблицу:

MariaDB [waky_test_db]> INSERT INTO waky_test_table (id,title,description) VALUES ('1','First title','Some description');
Query OK, 1 row affected (0.005 sec)

Или сразу несколько строк:

MariaDB [waky_test_db]> INSERT INTO waky_test_table (id,title,description) VALUES ('2','Second title','Another description'), ('123','One more title','A few words');
Query OK, 2 rows affected (0.004 sec)
Records: 2  Duplicates: 0  Warnings: 0

Проверим результат:

MariaDB [waky_test_db]> SELECT * FROM waky_test_table;
+-----+----------------+---------------------+
| id  | title          | description         |
+-----+----------------+---------------------+
|   1 | First title    | Some description    |
|   2 | Second title   | Another description |
| 123 | One more title | A few words         |
+-----+----------------+---------------------+
3 rows in set (0.002 sec)

Используя * мы выводим все столбцы, но можно указать один или несколько, используя названия столбцов:

MariaDB [waky_test_db]> SELECT id,description FROM waky_test_table;
+-----+---------------------+
| id  | description         |
+-----+---------------------+
|   1 | Some description    |
|   2 | Another description |
| 123 | A few words         |
+-----+---------------------+
3 rows in set (0.002 sec)

Обычно таблицы содержать большое количество строк — сотни, тысячи а порой и миллионы. Выводить все содержимое из таблицы нам излишне, тогда мы ищем только те строки, которые нас интересуют. Для этого используется конструкция условия:

MariaDB [waky_test_db]> SELECT title FROM waky_test_table WHERE id='2';
+--------------+
| title        |
+--------------+
| Second title |
+--------------+
1 row in set (0.002 sec)

Это удобно если мы хотим поменять конкретное значение в таблице:

MariaDB [waky_test_db]> UPDATE waky_test_table SET title='New second title' WHERE id='2';
Query OK, 1 row affected (0.004 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [waky_test_db]> SELECT title FROM waky_test_table WHERE id='2';
+------------------+
| title            |
+------------------+
| New second title |
+------------------+
1 row in set (0.001 sec)

Удалим одну из записей:

MariaDB [waky_test_db]> DELETE FROM waky_test_table WHERE description='A few words';
Query OK, 1 row affected (0.004 sec)

MariaDB [waky_test_db]> SELECT * FROM waky_test_table;
+----+------------------+---------------------+
| id | title            | description         |
+----+------------------+---------------------+
|  1 | First title      | Some description    |
|  2 | New second title | Another description |
+----+------------------+---------------------+
2 rows in set (0.001 sec)

Основные команды консоли MariaDB связанные с работой с таблицами мы рассмотрели, надо сказать пару слов о пользователях базы данных. Все операции выше мы проделали от имени рутового пользователя. Для работы непосредственно на сервере Linux это удобно, но вы не захотите использовать пользователя root в качестве пользователя базы данных вашего сайта.

Рутовый пользователь имеет полный доступ ко всему серверу MariaDB, и это небезопасно давать сайту оперировать пользователем с такими полномочиями. Для работы сайта создается отдельный пользователь, который имеет доступ только к базе конкретного сайта. Проверим какие пользователи уже заданы для нашего сервера базы данных:

MariaDB [waky_test_db]> SELECT Host,User FROM mysql.user;
+-----------+-------------+
| Host      | User        |
+-----------+-------------+
| localhost | mariadb.sys |
| localhost | mysql       |
| localhost | root        |
+-----------+-------------+
4 rows in set (0.006 sec)

Обратите внимание на столбец Host, для всех пользователей задан localhost, это значит что все они имеют доступ к базе только локально — находясь на одном хосте с базой данных.
Создадим нового пользователя.

MariaDB [waky_test_db]> CREATE USER 'waky_test_user'@'localhost' IDENTIFIED BY 'SomEPaSswoRD123';
Query OK, 0 rows affected (0.005 sec)

MariaDB [waky_test_db]> SELECT Host,User FROM mysql.user;
+-----------+----------------+
| Host      | User           |
+-----------+----------------+
| localhost | mariadb.sys    |
| localhost | mysql          |
| localhost | root           |
| localhost | waky_test_user |
+-----------+----------------+
5 rows in set (0.003 sec)

Нового пользователя мы так же добавляем в localhost, чтобы он не имел удаленного доступа к базе, это повысит защищенность. Теперь добавим разрешения новому пользователю работать с нашей базой данных:

MariaDB [waky_test_db]> GRANT ALL ON waky_test_db.* TO 'waky_test_user'@'localhost';
Query OK, 0 rows affected (0.004 sec)

MariaDB [waky_test_db]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

Проверяем привилегии для пользователя:

MariaDB [waky_test_db]> SHOW GRANTS FOR 'waky_test_user'@'localhost';
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for waky_test_user@localhost                                                                                   |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `waky_test_user`@`localhost` IDENTIFIED BY PASSWORD '*98D2C0005571495FA01F8BC9D769D0BD92BEF64F' |
| GRANT ALL PRIVILEGES ON `waky_test_db`.* TO `waky_test_user`@`localhost`                                              |
+-----------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.001 sec)

Теперь пользователь waky_test_user может осуществлять любые операции с базой waky_test_db. Мы неплохо попрактиковались, давайте наведем за собой порядок. Удаляем поочередно все что добавили — пользователя, таблицу, базу:

MariaDB [waky_test_db]> DROP USER 'waky_test_user'@'localhost';
Query OK, 0 rows affected (0.003 sec)

MariaDB [waky_test_db]> DROP TABLE waky_test_table;
Query OK, 0 rows affected (0.005 sec)

MariaDB [waky_test_db]> DROP DATABASE waky_test_db;
Query OK, 0 rows affected (0.002 sec)

Рассмотренные в этих примерах команды вы будете часто использовать при работе с консолью MariaDB.