Это многостраничный печатный вид этого раздела. Нажмите что бы печатать.

Вернуться к обычному просмотру страницы.

Управление базами данных: основные команды

SQL раздел с описанием основных команд по управлению базами данных
  • Создание и настройку баз данных и пользователей
  • Управление таблицами (создание, изменение, удаление)
  • Работу с индексами (добавление, удаление, оптимизация)
  • Вставку, обновление и выборку данных
  • Сложные запросы (JOIN, подзапросы, транзакции)
  • Экспорт и импорт данных (CSV, JSON, SQL-дампы)
  • Автоматизацию (хранимые процедуры, триггеры, скрипты)

Команды подходят для администрирования серверов, разработки приложений и аналитики данных. Для удобства они сгруппированы по темам и сопровождаются примерами.

1 - Справочный гайд по командам PostgreSQL

Основные команды по управлению базой данных PostgreSQL. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов

1. Установка PostgreSQL на разные ОС

Ubuntu/Debian

# Обновление пакетов  
sudo apt update  

# Установка PostgreSQL  
sudo apt install postgresql postgresql-contrib  

# Проверка статуса  
sudo systemctl status postgresql  

# Включение автозапуска  
sudo systemctl enable postgresql  

Manjaro/Arch Linux

# Установка PostgreSQL  
sudo pacman -S postgresql  

# Инициализация БД  
sudo su - postgres -c "initdb --locale en_US.UTF-8 -D /var/lib/postgres/data"  

# Запуск службы  
sudo systemctl start postgresql  

# Включение автозапуска  
sudo systemctl enable postgresql  

AlmaLinux/RHEL/CentOS

# Установка PostgreSQL  
sudo dnf install postgresql-server postgresql-contrib  

# Инициализация БД  
sudo postgresql-setup --initdb  

# Запуск службы  
sudo systemctl start postgresql  

# Включение автозапуска  
sudo systemctl enable postgresql  

2. Подключение и настройка

Вход в консоль PostgreSQL

sudo -u postgres psql  # Linux  
psql -U postgres       # Если настроен пароль  

Создание пользователя и БД

-- Создание пользователя  
CREATE USER myuser WITH PASSWORD 'mypassword';  

-- Создание базы данных  
CREATE DATABASE mydb OWNER myuser;  

-- Выдача прав  
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;  

-- Выход  
\q  

Подключение к БД

psql -U myuser -d mydb -h localhost -W  

3. Управление базами данных

Основные команды

-- Показать все БД  
\l  

-- Переключиться на БД  
\c dbname  

-- Создать БД  
CREATE DATABASE dbname;  

-- Удалить БД  
DROP DATABASE dbname;  

4. Управление таблицами

Создание и изменение таблиц

-- Создание таблицы  
CREATE TABLE users (  
    id SERIAL PRIMARY KEY,  
    name VARCHAR(50) NOT NULL,  
    email VARCHAR(100) UNIQUE,  
    created_at TIMESTAMP DEFAULT NOW()  
);  

-- Просмотр таблиц  
\dt  

-- Просмотр структуры таблицы  
\d users  

-- Добавление столбца  
ALTER TABLE users ADD COLUMN age INT;  

-- Удаление таблицы  
DROP TABLE users;  

5. Работа с данными

Вставка, обновление, удаление

-- Вставка данных  
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');  

-- Обновление данных  
UPDATE users SET email = 'new@example.com' WHERE id = 1;  

-- Удаление данных  
DELETE FROM users WHERE id = 1;  

-- Выборка данных  
SELECT * FROM users;  
SELECT name, email FROM users WHERE age > 18;  

6. Индексы и оптимизация

Создание и удаление индексов

-- Создать индекс  
CREATE INDEX idx_users_email ON users(email);  

-- Удалить индекс  
DROP INDEX idx_users_email;  

-- Полнотекстовый поиск (если нужно)  
CREATE EXTENSION pg_trgm;  
CREATE INDEX idx_users_name_search ON users USING gin(name gin_trgm_ops);  

7. Резервное копирование и восстановление

Экспорт и импорт БД

# Дамп всей БД  
pg_dump -U myuser -d mydb -f backup.sql  

# Дамп одной таблицы  
pg_dump -U myuser -d mydb -t users -f users_backup.sql  

# Восстановление БД  
psql -U myuser -d mydb -f backup.sql  

8. Расширенные возможности

Транзакции

BEGIN;  
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;  
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;  
COMMIT;  -- или ROLLBACK в случае ошибки  

Представления (Views)

CREATE VIEW active_users AS  
SELECT * FROM users WHERE last_login > NOW() - INTERVAL '30 days';  

Хранимые процедуры

CREATE OR REPLACE FUNCTION add_user(name TEXT, email TEXT)  
RETURNS VOID AS $$  
BEGIN  
    INSERT INTO users (name, email) VALUES (name, email);  
END;  
$$ LANGUAGE plpgsql;  

-- Вызов  
SELECT add_user('Bob', 'bob@example.com');  

9. Внешние источники данных

Импорт из CSV

COPY users(name, email) FROM '/path/to/users.csv' DELIMITER ',' CSV HEADER;  

Экспорт в CSV

COPY users TO '/path/to/users_export.csv' DELIMITER ',' CSV HEADER;  

Заключение

Этот гайд охватывает основные команды PostgreSQL для администрирования, разработки и анализа данных. Для более сложных сценариев обратитесь к официальной документации.

🚀 Совет: Используйте pgAdmin (графический интерфейс) для удобного управления PostgreSQL.

2 - Справочный гайд по командам MySQL

“Основные команды по управлению базой данных MySql. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов”

Установка MySQL/MariaDB на различные дистрибутивы Linux

Ubuntu/Debian

Установка MySQL

# Обновление пакетов
sudo apt update

# Установка MySQL сервера
sudo apt install mysql-server

# Запуск службы
sudo systemctl start mysql

# Включение автозапуска
sudo systemctl enable mysql

# Настройка безопасности (запустит интерактивный скрипт)
sudo mysql_secure_installation

# Проверка статуса
sudo systemctl status mysql

Установка MariaDB (альтернатива MySQL)

sudo apt update
sudo apt install mariadb-server
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation

Manjaro/Arch Linux

Установка MySQL (Arch)

# Обновление системы
sudo pacman -Syu

# Установка MySQL
sudo pacman -S mysql

# Инициализация базы данных
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

# Запуск службы
sudo systemctl start mysqld

# Включение автозапуска
sudo systemctl enable mysqld

# Настройка безопасности
sudo mysql_secure_installation

Установка MariaDB

sudo pacman -S mariadb
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation

AlmaLinux/RHEL/CentOS

Установка MySQL (Alma)

# Для AlmaLinux 8/9 и RHEL 8/9:

# Добавление MySQL репозитория
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-4.noarch.rpm

# Установка MySQL сервера
sudo dnf install mysql-community-server

# Запуск службы
sudo systemctl start mysqld

# Включение автозапуска
sudo systemctl enable mysqld

# Временный пароль можно найти в логах
sudo grep 'temporary password' /var/log/mysqld.log

# Настройка безопасности
sudo mysql_secure_installation

Установка MariaDB (Alma)

# Установка MariaDB
sudo dnf install mariadb-server

# Запуск службы
sudo systemctl start mariadb

# Включение автозапуска
sudo systemctl enable mariadb

# Настройка безопасности
sudo mysql_secure_installation

Общие команды после установки

Подключение к MySQL/MariaDB

mysql -u root -p

Создание нового пользователя (из консоли MySQL)

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Резервное копирование

# Резервное копирование всех баз
mysqldump -u root -p --all-databases > all_databases.sql

# Резервное копирование конкретной базы
mysqldump -u root -p database_name > database_name.sql

Восстановление из резервной копии

mysql -u root -p database_name < database_name.sql

Примечания

  1. Для MySQL 8.0+ используется новый плагин аутентификации caching_sha2_password, что может вызвать проблемы с некоторыми старыми клиентами. Можно изменить на старый плагин:

    ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    
  2. В некоторых дистрибутивах (особенно Manjaro/Arch) MariaDB является заменой MySQL по умолчанию.

  3. Для AlmaLinux/RHEL 9 может потребоваться отключить модуль MySQL перед установкой:

sudo dnf module disable mysql

Управление базой данных

-- Создание базы данных
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Просмотр всех баз данных
SHOW DATABASES;

-- Выбор базы данных для работы
USE db_name;

-- Удаление базы данных
DROP DATABASE db_name;

-- Резервное копирование базы данных (из командной строки)
mysqldump -u username -p db_name > backup.sql

-- Восстановление базы данных (из командной строки)
mysql -u username -p db_name < backup.sql

Управление пользователями базы данных

-- Создание пользователя
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- Изменение пароля пользователя
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';

-- Назначение прав пользователю
GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost';

-- Просмотр прав пользователя
SHOW GRANTS FOR 'username'@'localhost';

-- Отзыв прав
REVOKE ALL PRIVILEGES ON db_name.* FROM 'username'@'localhost';

-- Удаление пользователя
DROP USER 'username'@'localhost';

Управление таблицами

-- Создание таблицы
CREATE TABLE table_name (
    id INT AUTO_INCREMENT PRIMARY KEY,
    column1 VARCHAR(255) NOT NULL,
    column2 INT,
    column3 DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (column2) REFERENCES other_table(id)
) ENGINE=InnoDB;

-- Просмотр структуры таблицы
DESCRIBE table_name;
SHOW CREATE TABLE table_name;

-- Изменение таблицы
ALTER TABLE table_name ADD COLUMN new_column VARCHAR(100);
ALTER TABLE table_name MODIFY COLUMN column1 TEXT;
ALTER TABLE table_name DROP COLUMN column2;
ALTER TABLE table_name RENAME TO new_table_name;

-- Удаление таблицы
DROP TABLE table_name;

-- Очистка таблицы (удаление всех данных)
TRUNCATE TABLE table_name;

Управление индексами

-- Создание индекса
CREATE INDEX idx_name ON table_name (column1);
CREATE UNIQUE INDEX idx_unique_name ON table_name (column1, column2);

-- Создание полнотекстового индекса
CREATE FULLTEXT INDEX idx_ft ON table_name (text_column);

-- Просмотр индексов таблицы
SHOW INDEX FROM table_name;

-- Удаление индекса
DROP INDEX idx_name ON table_name;

Управление записями таблиц

-- Вставка данных
INSERT INTO table_name (column1, column2) VALUES ('value1', 123);
INSERT INTO table_name VALUES (NULL, 'value1', 123, DEFAULT);

-- Множественная вставка
INSERT INTO table_name (column1, column2) VALUES 
('value1', 123),
('value2', 456),
('value3', 789);

-- Обновление данных
UPDATE table_name SET column1 = 'new_value' WHERE id = 1;
UPDATE table_name SET column1 = 'value' WHERE column2 > 100 LIMIT 10;

-- Удаление данных
DELETE FROM table_name WHERE id = 1;
DELETE FROM table_name ORDER BY created_at LIMIT 100;

-- Выборка данных
SELECT * FROM table_name;
SELECT column1, column2 FROM table_name WHERE id > 100;
SELECT DISTINCT column1 FROM table_name;
SELECT COUNT(*) FROM table_name;

-- Сортировка и ограничение
SELECT * FROM table_name ORDER BY column1 DESC LIMIT 10 OFFSET 20;

-- Группировка
SELECT column1, COUNT(*) FROM table_name GROUP BY column1 HAVING COUNT(*) > 5;

Связанные запросы

-- Внутреннее соединение (INNER JOIN)
SELECT t1.*, t2.column 
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.table1_id;

-- Внешние соединения (LEFT/RIGHT JOIN)
SELECT t1.*, t2.column 
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.table1_id;

-- Подзапросы
SELECT * FROM table1 WHERE id IN (SELECT table1_id FROM table2 WHERE column = 'value');

-- Объединение результатов (UNION)
SELECT column1 FROM table1
UNION
SELECT column2 FROM table2;

-- Транзакции
START TRANSACTION;
INSERT INTO table1 VALUES (1, 'test');
UPDATE table2 SET column = 'value' WHERE id = 1;
COMMIT;
-- или ROLLBACK;

Выгрузка данных во внешние источники

-- Выгрузка в файл (из командной строки)
mysql -u username -p -e "SELECT * FROM db_name.table_name" > output.csv

-- Использование SELECT INTO OUTFILE
SELECT * INTO OUTFILE '/tmp/result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM table_name;

-- Экспорт в JSON (через клиент)
SELECT JSON_OBJECT('id', id, 'name', name) FROM table_name;

Создание скриптов

-- Хранимые процедуры
DELIMITER //
CREATE PROCEDURE procedure_name(IN param1 INT)
BEGIN
    SELECT * FROM table_name WHERE id = param1;
END //
DELIMITER ;

-- Вызов процедуры
CALL procedure_name(1);

-- Функции
DELIMITER //
CREATE FUNCTION function_name(param1 INT) RETURNS INT
BEGIN
    DECLARE result INT;
    SELECT COUNT(*) INTO result FROM table_name WHERE id > param1;
    RETURN result;
END //
DELIMITER ;

-- Триггеры
DELIMITER //
CREATE TRIGGER trigger_name BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
    IF NEW.column1 IS NULL THEN
        SET NEW.column1 = 'default';
    END IF;
END //
DELIMITER ;

-- Представления (VIEW)
CREATE VIEW view_name AS SELECT column1, column2 FROM table_name WHERE column3 > 100;

Загрузка данных из разных форматов

-- Загрузка из CSV
LOAD DATA INFILE '/path/to/file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

-- Импорт JSON
INSERT INTO table_name (column1, column2)
SELECT j->>'$.field1', j->>'$.field2'
FROM JSON_TABLE('[{"field1":"value1","field2":123}]', '$[*]' 
    COLUMNS (
        j JSON PATH '$'
    )
) AS j;

-- Использование mysqlimport (из командной строки)
mysqlimport --ignore-lines=1 --fields-terminated-by=, --local -u username -p db_name /path/to/file.csv

Этот гайд охватывает основные команды MySQL для работы с базами данных. Для более сложных операций рекомендуется обращаться к официальной документации MySQL.

2.1 - Восстановление пароля root в MySQL

Восстановление пароля root в MariaDB выполняется в несколько шагов: остановка сервиса, запуск в безопасном режиме (без проверки прав), смена пароля и перезагрузка. Вот подробная инструкция.

1. Остановка MySQL/MariaDB

Linux (systemd)

sudo systemctl stop mariadb

Linux (SysVinit)

sudo service mysql stop  # или sudo /etc/init.d/mysql stop

Windows

net stop mariadb

(Или через «Службы» в services.msc).


2. Запуск MySQL/MariaDB в безопасном режиме (без аутентификации)

sudo mysqld_safe --skip-grant-tables --skip-networking &
  • --skip-grant-tables — отключает проверку паролей.
  • --skip-networking — запрещает удалённые подключения (для безопасности).

Важно: Не закрывайте терминал, пока меняете пароль!


3. Подключение к MySQL/MariaDB без пароля

Откройте новый терминал и выполните:

mysql -u root

Теперь вы в консоли MariaDB без пароля.


4. Смена пароля root

Способ 1 (для MariaDB 10.4 и новее)

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'новый_пароль';

Способ 2 (для старых версий)

USE mysql;
UPDATE user SET password=PASSWORD('новый_пароль') WHERE User='root';
FLUSH PRIVILEGES;

Если root привязан к unix_socket (например, в Debian/Ubuntu)

UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'новый_пароль';
FLUSH PRIVILEGES;

5. Выход и перезапуск MySQL/MariaDB

  1. Выйдите из MySQL-консоли:

    EXIT;
    
  2. Завершите процесс mysqld_safe:

    sudo killall mysqld_safe
    
  3. Перезапустите MariaDB в обычном режиме:

    sudo systemctl start mariadb  # или sudo service mysql start
    

6. Проверка нового пароля

mysql -u root -p

Введите новый пароль. Если вход удался — пароль восстановлен!


Дополнительные сценарии

Если root не имеет прав (ошибка доступа)

Попробуйте создать временного пользователя с правами root:

GRANT ALL PRIVILEGES ON *.* TO 'tempadmin'@'localhost' IDENTIFIED BY 'temp_pass';
FLUSH PRIVILEGES;

После этого войдите как tempadmin и смените пароль root.

Windows (если mysqld_safe недоступен)

  1. Откройте командную строку от имени администратора.

  2. Перейдите в папку с MariaDB (например, C:\Program Files\MariaDB\bin).

  3. Запустите:

    mysqld --skip-grant-tables
    
  4. В другом окне выполните mysql -u root и смените пароль.


Важно!

  • Запишите новый пароль в надёжное место.

  • Удалите анонимных пользователей (если есть):

    DROP USER ''@'localhost';
    
  • Настройте брандмауэр, чтобы запретить внешний доступ к порту 3306, если это не требуется.


Итог

  1. Остановили MariaDB.
  2. Запустили в безопасном режиме.
  3. Вошли без пароля и обновили его.
  4. Перезапустили сервис.

Если что-то пошло не так — проверьте логи (/var/log/mysql/error.log) и попробуйте снова.

3 - Справочный гайд по командам SQLite

Основные команды по управлению базой данных SQLite. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов

Полное руководство по SQLite: от установки до продвинутого использования

Оглавление

  1. Введение в SQLite
  2. Установка SQLite
  3. Основы работы с SQLite
  4. Управление базами данных
  5. Работа с таблицами
  6. Типы данных
  7. CRUD-операции
  8. Индексы и оптимизация
  9. Транзакции
  10. Представления и триггеры
  11. Импорт и экспорт данных
  12. Интеграция с языками программирования
  13. Оптимизация производительности
  14. Резервное копирование
  15. Безопасность

Введение в SQLite

SQLite — это встраиваемая реляционная СУБД, которая:

  • Не требует сервера (работает с файлами напрямую)
  • Поддерживает стандартный SQL
  • Имеет минимальные требования к ресурсам
  • Используется в мобильных приложениях, браузерах и встроенных системах

Установка SQLite

Windows

  1. Скачать предварительно скомпилированные бинарники с официального сайта
  2. Добавить путь к sqlite3.exe в переменную PATH

Linux (Ubuntu/Debian)

sudo apt update
sudo apt install sqlite3 libsqlite3-dev

MacOS

brew install sqlite

Проверка установки

sqlite3 --version

Основы работы с SQLite

Запуск интерфейса командной строки

sqlite3 mydatabase.db

Основные команды интерфейса

.help       -- Показать все команды
.tables     -- Показать список таблиц
.schema     -- Показать структуру таблиц
.mode       -- Изменить режим вывода (csv, column, json и др.)
.headers on -- Показать заголовки столбцов
.quit       -- Выйти из интерфейса

Управление базами данных

Создание/открытие базы данных

sqlite3 database.db

Резервное копирование

-- В командной строке SQLite:
.output backup.sql
.dump
.output stdout

-- Или через командную строку ОС:
sqlite3 database.db .dump > backup.sql

Восстановление из резервной копии

sqlite3 newdatabase.db < backup.sql

Работа с таблицами

Создание таблицы

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT NOT NULL UNIQUE,
    email TEXT NOT NULL UNIQUE,
    age INTEGER,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Изменение таблицы

-- Добавление столбца
ALTER TABLE users ADD COLUMN is_active INTEGER DEFAULT 1;

-- Удаление таблицы
DROP TABLE users;

Ограничения (Constraints)

CREATE TABLE products (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    price REAL CHECK(price > 0),
    category_id INTEGER REFERENCES categories(id),
    UNIQUE(name, category_id)
);

Типы данных в SQLite

SQLite использует динамическую типизацию. Основные типы:

  1. NULL - значение NULL
  2. INTEGER - целое число
  3. REAL - число с плавающей точкой
  4. TEXT - текстовая строка
  5. BLOB - бинарные данные

CRUD-операции

Вставка данных (Create)

INSERT INTO users (username, email, age)
VALUES ('john_doe', 'john@example.com', 30);

-- Множественная вставка
INSERT INTO users (username, email, age)
VALUES 
    ('alice', 'alice@example.com', 25),
    ('bob', 'bob@example.com', 28);

Чтение данных (Read)

-- Простой запрос
SELECT * FROM users;

-- С условиями
SELECT username, email FROM users WHERE age > 25;

-- Сортировка
SELECT * FROM users ORDER BY age DESC;

-- Группировка
SELECT age, COUNT(*) FROM users GROUP BY age;

-- Ограничение вывода
SELECT * FROM users LIMIT 10 OFFSET 5;

Обновление данных (Update)

UPDATE users SET age = 31 WHERE username = 'john_doe';

Удаление данных (Delete)

DELETE FROM users WHERE id = 5;

Индексы и оптимизация

Создание индекса

CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_age ON users(age);

Удаление индекса

DROP INDEX idx_users_email;

Анализ запросов

EXPLAIN QUERY PLAN SELECT * FROM users WHERE email = 'john@example.com';

Транзакции

Использование транзакций

BEGIN TRANSACTION;
INSERT INTO accounts (user_id, balance) VALUES (1, 1000);
UPDATE users SET last_transaction = CURRENT_TIMESTAMP WHERE id = 1;
COMMIT;

-- В случае ошибки:
ROLLBACK;

Представления и триггеры

Создание представления

CREATE VIEW active_users AS
SELECT * FROM users WHERE is_active = 1;

Создание триггера

CREATE TRIGGER update_timestamp
AFTER UPDATE ON users
FOR EACH ROW
BEGIN
    UPDATE users SET updated_at = CURRENT_TIMESTAMP WHERE id = OLD.id;
END;

Импорт и экспорт данных

Импорт из CSV

.mode csv
.import data.csv tablename

Экспорт в CSV

.headers on
.mode csv
.output data.csv
SELECT * FROM tablename;
.output stdout

Импорт/экспорт JSON

-- Для работы с JSON требуется SQLite версии 3.38.0+
SELECT json_object('id', id, 'name', username) FROM users;

Интеграция с языками программирования

Python

import sqlite3

conn = sqlite3.connect('database.db')
cursor = conn.cursor()

cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()

conn.close()

Node.js

const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('database.db');

db.all("SELECT * FROM users", (err, rows) => {
    console.log(rows);
});

db.close();

Оптимизация производительности

  1. Используйте транзакции для групповых операций
  2. Создавайте индексы для часто используемых полей
  3. Используйте PRAGMA команды для настройки:
    PRAGMA journal_mode = WAL;  -- Режим записи журнала
    PRAGMA synchronous = NORMAL; -- Баланс между надежностью и скоростью
    PRAGMA cache_size = -2000;  -- Размер кеша в KB
    

Резервное копирование

Полное резервное копирование

sqlite3 database.db ".backup backup.db"

Инкрементное резервное копирование

Используйте API SQLite для реализации инкрементного бэкапа в вашем приложении.

Безопасность

  1. Проверяйте входные данные перед выполнением SQL-запросов
  2. Используйте параметризованные запросы:
    # Python пример
    cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
    
  3. Ограничивайте права доступа к файлу базы данных на уровне ОС

Заключение

SQLite — мощная и легковесная СУБД, идеально подходящая для:

  • Мобильных приложений
  • Встраиваемых систем
  • Локальных приложений
  • Тестирования и прототипирования

Для более сложных сценариев обратитесь к официальной документации.

4 - Полное руководство по MongoDB: от основ до работы с JSON

Основные команды по управлению базой данных MongoDB. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов

Оглавление

  1. Введение в MongoDB
  2. Установка MongoDB
  3. Подключение к базе
  4. Основные операции CRUD
  5. Работа с коллекциями
  6. Запросы и агрегации
  7. Индексы и оптимизация
  8. Транзакции
  9. Работа с JSON
  10. Интеграция с языками программирования
  11. Безопасность и администрирование
  12. Резервное копирование

1. Введение в MongoDB

MongoDB — это NoSQL-база данных, которая хранит данные в документах JSON-подобного формата (BSON).

🔹 Ключевые особенности:

  • Гибкая схема (документы могут иметь разную структуру)
  • Горизонтальная масштабируемость (шардирование)
  • Поддержка сложных запросов и агрегаций
  • Встроенная работа с JSON

🔹 Основные понятия:

  • Документ ≈ строка в SQL (хранится в BSON)
  • Коллекция ≈ таблица в SQL
  • База данных ≈ схема в SQL

2. Установка MongoDB

Linux (Ubuntu/Debian)

# Импорт ключа и добавление репозитория
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -sc)/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

# Установка MongoDB
sudo apt update
sudo apt install mongodb-org

# Запуск сервиса
sudo systemctl start mongod
sudo systemctl enable mongod

Windows

  1. Скачайте установщик с официального сайта
  2. Запустите .msi файл
  3. Добавьте C:\Program Files\MongoDB\Server\<версия>\bin в PATH

MacOS (Homebrew)

brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-community

Проверка работы

mongosh  # Запуск оболочки MongoDB

3. Подключение к базе

Через mongosh (CLI)

mongosh "mongodb://localhost:27017"  # Локальное подключение
mongosh "mongodb://user:pass@host:27017/dbname"  # С аутентификацией

В Node.js (драйвер mongodb)

const { MongoClient } = require('mongodb');
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

async function connect() {
    try {
        await client.connect();
        console.log("Connected to MongoDB");
        const db = client.db("mydb");
        const collection = db.collection("users");
        // ... операции с коллекцией
    } finally {
        await client.close();
    }
}
connect();

4. Основные операции CRUD

Вставка документов (insertOne, insertMany)

// Вставка одного документа
db.users.insertOne({
    name: "Alice",
    age: 25,
    skills: ["JavaScript", "MongoDB"]
});

// Вставка нескольких документов
db.users.insertMany([
    { name: "Bob", age: 30 },
    { name: "Charlie", age: 22 }
]);

Поиск (find, findOne)

// Найти всех пользователей
db.users.find();

// Найти пользователей старше 25
db.users.find({ age: { $gt: 25 } });

// Найти первого пользователя с именем "Alice"
db.users.findOne({ name: "Alice" });

Обновление (updateOne, updateMany)

// Обновить возраст Alice
db.users.updateOne(
    { name: "Alice" },
    { $set: { age: 26 } }
);

// Увеличить возраст всех пользователей на 1
db.users.updateMany(
    {},
    { $inc: { age: 1 } }
);

Удаление (deleteOne, deleteMany)

// Удалить пользователя Bob
db.users.deleteOne({ name: "Bob" });

// Удалить всех младше 18
db.users.deleteMany({ age: { $lt: 18 } });

5. Работа с коллекциями

Создание и удаление коллекций

// Создать коллекцию
db.createCollection("products");

// Удалить коллекцию
db.products.drop();

Переименование коллекции

db.products.renameCollection("items");

6. Запросы и агрегации

Операторы сравнения

db.users.find({ age: { $gt: 20, $lte: 30 } });  // Возраст > 20 и ≤ 30
db.users.find({ name: { $regex: /^A/ } });      // Имя начинается на "A"

Агрегация ($match, $group, $sort)

db.orders.aggregate([
    { $match: { status: "completed" } },
    { $group: { _id: "$customer", total: { $sum: "$amount" } } },
    { $sort: { total: -1 } }
]);

7. Индексы и оптимизация

Создание индекса

db.users.createIndex({ email: 1 });  // Уникальный индекс
db.users.createIndex({ name: "text" });  // Текстовый поиск

Просмотр индексов

db.users.getIndexes();

8. Транзакции

const session = client.startSession();
try {
    session.startTransaction();
    await db.users.updateOne(
        { name: "Alice" },
        { $inc: { balance: -100 } },
        { session }
    );
    await db.users.updateOne(
        { name: "Bob" },
        { $inc: { balance: 100 } },
        { session }
    );
    await session.commitTransaction();
} catch (e) {
    await session.abortTransaction();
} finally {
    session.endSession();
}

9. Работа с JSON

Экспорт данных в JSON

mongoexport --db=mydb --collection=users --out=users.json --jsonArray

Импорт JSON в MongoDB

mongoimport --db=mydb --collection=users --file=users.json --jsonArray

Запросы к JSON-полям

db.users.find({
    "address.city": "New York"  // Обращение к вложенным полям
});

10. Интеграция с языками

Python (PyMongo)

from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
db = client["mydb"]
collection = db["users"]
collection.insert_one({"name": "Alice"})

Go (MongoDB Driver)

client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://localhost:27017"))
collection := client.Database("mydb").Collection("users")
_, err = collection.InsertOne(context.TODO(), bson.D{{"name", "Alice"}})

11. Безопасность

Включение аутентификации

use admin
db.createUser({
    user: "admin",
    pwd: "securepassword",
    roles: ["root"]
});

Запуск MongoDB с аутентификацией

mongod --auth

12. Резервное копирование

Экспорт (mongodump)

mongodump --db=mydb --out=/backup

Восстановление (mongorestore)

mongorestore --db=mydb /backup/mydb

Заключение

MongoDB — мощная NoSQL-база, идеальная для:

  • Гибких схем данных
  • Масштабируемых приложений
  • Работы с JSON

📌 Документация: https://docs.mongodb.com

5 - Полное руководство по OpenSearch: установка, настройка и использование

Основные команды по управлению базой данных OpenSearch. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов

Оглавление

  1. Введение в OpenSearch
  2. Установка OpenSearch
  3. Настройка кластера
  4. Основные операции с индексами
  5. Работа с данными (CRUD)
  6. Поиск и агрегации
  7. Индексы и маппинги
  8. Безопасность и RBAC
  9. Мониторинг и логирование
  10. Резервное копирование
  11. Интеграция с Logstash и Kibana
  12. Использование в Python и Go

1. Введение в OpenSearch

OpenSearch — это форк Elasticsearch, созданный AWS после изменения лицензии Elastic.

🔹 Ключевые возможности:

  • Полнотекстовый поиск
  • Анализ логов и временных рядов
  • Поддержка REST API
  • Масштабируемость и отказоустойчивость

🔹 Основные компоненты:

  • OpenSearch — ядро поиска и аналитики
  • OpenSearch Dashboards (аналог Kibana) — визуализация данных
  • Logstash (опционально) — сбор и обработка данных

2. Установка OpenSearch

Linux (Debian/Ubuntu)

# Добавление репозитория OpenSearch
echo "deb https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-2.x.list

# Установка
wget -qO - https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo apt-key add -
sudo apt update
sudo apt install opensearch

Запуск сервиса

sudo systemctl start opensearch
sudo systemctl enable opensearch

Проверка работы

curl -X GET "https://localhost:9200" -u 'admin:admin' --insecure

Ответ:

{
  "name" : "opensearch-node1",
  "cluster_name" : "opensearch-cluster",
  "version" : {
    "distribution" : "opensearch",
    "number" : "2.11.0"
  }
}

3. Настройка кластера

Конфигурация находится в /etc/opensearch/opensearch.yml.

Базовая настройка

cluster.name: opensearch-cluster
node.name: opensearch-node1
network.host: 0.0.0.0
discovery.type: single-node  # Для однодоступной конфигурации
plugins.security.disabled: false  # Включить безопасность

Настройка кластера из нескольких узлов

discovery.seed_hosts: ["node1:9300", "node2:9300"]
cluster.initial_master_nodes: ["node1", "node2"]

4. Основные операции с индексами

Создание индекса

curl -X PUT "https://localhost:9200/my-index" -u 'admin:admin' --insecure

Удаление индекса

curl -X DELETE "https://localhost:9200/my-index" -u 'admin:admin' --insecure

Просмотр списка индексов

curl -X GET "https://localhost:9200/_cat/indices?v" -u 'admin:admin' --insecure

5. Работа с данными (CRUD)

Добавление документа

curl -X POST "https://localhost:9200/my-index/_doc/1" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
  "title": "OpenSearch Guide",
  "author": "admin",
  "tags": ["search", "database"]
}'

Получение документа

curl -X GET "https://localhost:9200/my-index/_doc/1" -u 'admin:admin' --insecure

Обновление документа

curl -X POST "https://localhost:9200/my-index/_update/1" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
  "doc": {
    "author": "new-author"
  }
}'

Удаление документа

curl -X DELETE "https://localhost:9200/my-index/_doc/1" -u 'admin:admin' --insecure

6. Поиск и агрегации

Простой поиск

curl -X GET "https://localhost:9200/my-index/_search?q=title:OpenSearch" -u 'admin:admin' --insecure

Сложный запрос (JSON-тело)

curl -X GET "https://localhost:9200/my-index/_search" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
  "query": {
    "match": {
      "title": "OpenSearch"
    }
  }
}'

Агрегации (группировка по тегам)

curl -X GET "https://localhost:9200/my-index/_search" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
  "aggs": {
    "tag_counts": {
      "terms": { "field": "tags.keyword" }
    }
  }
}'

7. Индексы и маппинги

Создание индекса с маппингом

curl -X PUT "https://localhost:9200/books" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "year": { "type": "integer" }
    }
  }
}'

Добавление нового поля

curl -X PUT "https://localhost:9200/books/_mapping" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
  "properties": {
    "author": { "type": "keyword" }
  }
}'

8. Безопасность и RBAC

Создание пользователя

curl -X PUT "https://localhost:9200/_plugins/_security/api/internalusers/user1" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
  "password": "secure123",
  "backend_roles": ["readers"]
}'

Назначение роли

curl -X PUT "https://localhost:9200/_plugins/_security/api/roles/read_only" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
  "cluster_permissions": [],
  "index_permissions": [{
    "index_patterns": ["*"],
    "allowed_actions": ["read"]
  }]
}'

9. Мониторинг и логирование

Проверка состояния кластера

curl -X GET "https://localhost:9200/_cluster/health" -u 'admin:admin' --insecure

Логи OpenSearch

tail -f /var/log/opensearch/opensearch.log

10. Резервное копирование

Использование Snapshot API

curl -X PUT "https://localhost:9200/_snapshot/my-backup" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d '
{
  "type": "fs",
  "settings": {
    "location": "/backups/opensearch"
  }
}'

Создание снепшота

curl -X PUT "https://localhost:9200/_snapshot/my-backup/snapshot-1" -u 'admin:admin' --insecure

11. Интеграция с Logstash и OpenSearch Dashboards

Настройка Logstash для отправки данных

input {
  file {
    path => "/var/log/app.log"
    start_position => "beginning"
  }
}
output {
  opensearch {
    hosts => ["https://localhost:9200"]
    index => "app-logs"
    user => "admin"
    password => "admin"
    ssl_certificate_verification => false
  }
}

Запуск OpenSearch Dashboards

sudo systemctl start opensearch-dashboards

Доступно по адресу: http://localhost:5601


12. Использование в Python и Go

Python (opensearch-py)

from opensearchpy import OpenSearch

client = OpenSearch(
    hosts=["https://localhost:9200"],
    http_auth=("admin", "admin"),
    verify_certs=False
)

response = client.index(
    index="my-index",
    body={"title": "Python OpenSearch Guide"}
)

Go (opensearch-go)

package main

import (
	"context"
	"github.com/opensearch-project/opensearch-go"
)

func main() {
	client, err := opensearch.NewClient(opensearch.Config{
		Addresses: []string{"https://localhost:9200"},
		Username:  "admin",
		Password:  "admin",
	})
	res, err := client.Index(
		"my-index",
		strings.NewReader(`{"title": "Go OpenSearch Guide"}`),
	)
}

Официальная документация: https://opensearch.org/docs