Содержание

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;