====== MySQL (MariaDB) ======
Сервер базы данных.\\
===== Установка =====
apt install mariadb-server
mysql_secure_installation
Основные конфиги находятся в папке **/etc/mysql/mariadb.conf.d/**.\\
Настройки сервера **50-server.cnf**.\\
===== Администрирование =====
После установки, командой **# mysql -u root -p** можно подключится и под системным linux-root и под mysql-root.\\
**Бэкапирование БД**
mysqldump `namedb` > \..\filename.sql
mysqldump --databases db1 db2 [--all-databases] > \..\filename.sql
# Развернуть из бэкапа
mysql [`namedb`] < \..\filename.sql
===== Примеры =====
:!: Администрирование
# Запуск команды **mysql** без sudo
SET PASSWORD = PASSWORD('your-pass');
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILAGES;
# Очистка таблицы + сброс инкремента
truncate table `table`;
:!: Базы
SHOW DATABASES;
use db1;
SHOW CREATE DATABASE namedb;
CREATE DATABASE db1 default character set utf8 default collate utf8_general_ci;
CREATE TABLE table1 (Id int, str1 varchar(45));
CREATE TABLE zbx_alerts (
id INT auto_increment NOT NULL,
date_start varchar(45) NULL,
`level` varchar(45) NULL,
host varchar(45) NULL,
`trigger` varchar(45) NULL,
duration_min varchar(45) NULL,
primary key (id)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;
:!: Пользователи
SELECT User,Host from mysql.user;
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'mypassword';
GRANT [REVOKE] ALL PRIVILEGES ON db1.* TO 'admin'@'localhost';
CREATE USER 'admin'@'%' IDENTIFIED BY 'mypassword';
SHOW GRANTS FOR 'user';
FLUSH PRIVILEGES;
* **ALL PRIVILEGES** - все, кроме GRANT;
* **USAGE PRIVILEGES** - никаких привилегий;
* **SELECT,INSERT,UPDATE,DELETE**
* **CREATE** - создавать таблицы или базы данных;
* **ALTER** - изменять структуру таблиц;
* **DROP** - удалять таблицы;
:!: В разработке
**Создание таблицы**
create table `table_name`
(`col1` int(11) not null auto_increment,
`col2` varchar(45) not null,
primary key(`id`)
) engine=innodb default charset=utf8 comment='Примечание';
**Копирование данных из одной таблицы в другую**\\
При условии что кол-во столбцов совпадает.
insert into `target_table`
select from `source_table`;
С дополнением статических, в т.ч. авто-инкремент, целевой таблице так же, можно задать перечень столбцов
insert into `target_table`
select 0, 'value', `col1`, `col2` from `source_table`;
**Переворот значения в ячейке**
update `table` set `col1`= not `col1` where *;
**Условие выбора**\\
На примере проверки даты
if(`date` = CurDate(), 'Сегодня', if(`date`= CurDate() - interval 1 day, 'Вчера', date_format(`date`, '%d %b')))
select if(1=1, 'true', 'false');
**Объединение запросов**\\
Объединяет несколько запросов в один результат, необходимо что бы кол-во столбцов было одинаковым, названия берется из первого запроса\\
select `col1`, `col2` from `tab1`
union
select `col1`, `col2` from `tab2`
order by `col1` asc;
**Усечение строки**\\
Применяется ко всему столбцу, укорачиваем строку на 8 символов
update `table1` set `col1`= substring(`col1`, 1, (length(`col1`)- 8));
**Переменные**\\
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
:!: Администрирование
# Запуск команды **mysql** без sudo
SET PASSWORD = PASSWORD('your-pass');
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILAGES;
# Очистка таблицы + сброс инкремента
truncate table `table`;
:!: В разработке. MSSQL
**Создание таблицы**\\
create table db-name.dbo[схема].table-name
(id int IDENTITY(1,1) PRIMARY KEY,
field1 nvarchar(max) not null);
**Удаление таблицы с проверкой существования**\\
if object_id('dbname.dbo.tab_test', 'U') is not null
drop table dbname.dbo.tab_test;
# MSSQL 2016
drop table if exists dbname.dbo.tab_test;