sqlite3 — бази даних

sqlite3 — бази даних

Изображение записи по умолчанию
0

sqlite3 — базы данных

SQLite — лёгкая встроенная база данных, не требующая сервера. Идеальна для скриптов, небольших приложений и обучения SQL. Хранит всю базу в одном файле.

Установка и запуск

# Установка (если нет)
sudo apt install sqlite3

# Создать/открыть базу данных
sqlite3 test.db

# База в памяти (временная)
sqlite3 :memory:

# Выполнить команду и выйти
sqlite3 test.db ".tables"

Базовые команды sqlite3

# Внутри интерактивного режима sqlite3:

.tables              # список таблиц
.schema              # схема всех таблиц
.schema users        # схема конкретной таблицы
.databases           # список баз
.mode column         # формат вывода колонками
.headers on          # показать заголовки
.read script.sql     # выполнить SQL из файла
.dump                # дамп базы в SQL
.exit или .quit      # выход
.help                # справка

Создание таблиц (DDL)

-- Создание таблицы
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE,
    age INTEGER DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Создание таблицы с внешним ключом
CREATE TABLE orders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER,
    product TEXT NOT NULL,
    amount REAL DEFAULT 0,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- Удалить таблицу
DROP TABLE orders;

-- Добавить колонку
ALTER TABLE users ADD COLUMN phone TEXT;

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

-- Вставка одной строки
INSERT INTO users (name, email, age)
VALUES ("Alice", "alice@example.com", 30);

-- Вставка нескольких строк
INSERT INTO users (name, email, age)
VALUES
    ("Bob", "bob@example.com", 25),
    ("Charlie", "charlie@example.com", 35),
    ("Dave", "dave@example.com", 28);

-- С указанием всех колонок
INSERT INTO users VALUES (NULL, "Eve", "eve@example.com", 22, NULL);

Запросы (SELECT)

-- Все строки
SELECT * FROM users;

-- Конкретные колонки
SELECT name, email FROM users;

-- С условием
SELECT * FROM users WHERE age >= 30;
SELECT * FROM users WHERE name = "Alice";
SELECT * FROM users WHERE age > 20 AND age < 35;

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

-- Ограничение количества
SELECT * FROM users LIMIT 5;
SELECT * FROM users LIMIT 5 OFFSET 10;

-- Подсчёт
SELECT COUNT(*) FROM users;
SELECT COUNT(*) FROM users WHERE age >= 30;

-- Уникальные значения
SELECT DISTINCT age FROM users;

Обновление (UPDATE)

-- Обновить запись
UPDATE users SET age = 31 WHERE name = "Alice";

-- Обновить несколько полей
UPDATE users SET age = 26, email = "bob_new@example.com" WHERE name = "Bob";

-- ⚠️ ВСЕГДА используйте WHERE!
-- Без WHERE обновятся ВСЕ строки!

Удаление (DELETE)

-- Удалить конкретную запись
DELETE FROM users WHERE name = "Dave";

-- Удалить по условию
DELETE FROM users WHERE age < 25;

-- Удалить все записи (ОСТОРОЖНО!)
DELETE FROM users;

JOIN — объединение таблиц

-- INNER JOIN
SELECT users.name, orders.product, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;

-- LEFT JOIN (все пользователи, даже без заказов)
SELECT users.name, orders.product
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

-- С агрегацией
SELECT users.name, COUNT(orders.id) as order_count
FROM users
LEFT JOIN orders ON users.id = orders.user_id
GROUP BY users.id;

Выполнение SQL из файла

# Создать файл queries.sql
echo "SELECT * FROM users;" > queries.sql

# Выполнить
sqlite3 test.db < queries.sql

# Или внутри sqlite3:
.read queries.sql

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

# Экспорт в SQL-формат (дамп)
sqlite3 test.db .dump > backup.sql

# Импорт из дампа
sqlite3 new.db < backup.sql

# Экспорт в CSV
sqlite3 test.db ".mode csv" ".headers on" ".output users.csv" "SELECT * FROM users;"

# Импорт из CSV
sqlite3 test.db ".mode csv" ".import data.csv users"

Практическое задание

  1. Создайте базу: sqlite3 shop.db
  2. Создайте таблицу users: CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT);
  3. Вставьте 3 записи: INSERT INTO users VALUES (1, "Alice", "alice@mail.com");
  4. Проверьте: SELECT * FROM users;
  5. Обновите: UPDATE users SET name = "Bob" WHERE id = 1;
  6. Удалите: DELETE FROM users WHERE id = 3;
  7. Включите красивый вывод: .mode column и .headers on
  8. Сделайте дамп: .dump

Comments

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Related Post