Сервер базы данных.
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`;
Создание таблицы
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;