🗃️ Ma'lumotlar bazasi yaratish va boshqarish

Ma'lumotlar bazasi yaratish

1. Yangi ma'lumotlar bazasi

# Yangi ma'lumotlar bazasi yaratish
sqlite3 mydatabase.db

# Ma'lumotlar bazasi mavjudligini tekshirish
ls -la mydatabase.db

2. Xotira bazasi (In-Memory)

# Vaqtincha ma'lumotlar bazasi
sqlite3 :memory:

# Yoki
sqlite3

Ma'lumotlar bazasi boshqaruvi

Ma'lumotlar bazasini ochish

# CLI da ochish
.open mydatabase.db

# Yangi fayl yaratish
.open new_database.db

# Mavjud faylni ochish
.open existing_database.db

Ma'lumotlar bazasi haqida ma'lumot

# Ulangan ma'lumotlar bazalari
.databases

# Ma'lumotlar bazasi hajmi
SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size();

Jadval yaratish

Oddiy jadval

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

Murakkab jadval

CREATE TABLE products (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    description TEXT,
    price REAL NOT NULL CHECK (price > 0),
    category_id INTEGER,
    stock_quantity INTEGER DEFAULT 0,
    is_active BOOLEAN DEFAULT 1,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (category_id) REFERENCES categories(id)
);

Jadval boshqaruvi

Jadval strukturasi

# Jadval strukturasi
.schema users

# Barcha jadvallar strukturasi
.schema

# Indekslarni ham ko'rish
.schema --indices

Jadvalni o'zgartirish

# Ustun qo'shish
ALTER TABLE users ADD COLUMN phone TEXT;

# Jadval nomini o'zgartirish
ALTER TABLE users RENAME TO customers;

# Ustunni o'chirish (SQLite da cheklangan)
-- ALTER TABLE users DROP COLUMN phone; -- Ishlamaydi

Jadvalni o'chirish

# Jadvalni o'chirish
DROP TABLE users;

# Agar mavjud bo'lsa o'chirish
DROP TABLE IF EXISTS users;

Indekslar

Indeks yaratish

# Oddiy indeks
CREATE INDEX idx_users_email ON users(email);

# Unique indeks
CREATE UNIQUE INDEX idx_users_phone ON users(phone);

# Murakkab indeks
CREATE INDEX idx_users_name_age ON users(name, age);

Indekslarni boshqarish

# Indekslarni ko'rish
.indices users

# Indeksni o'chirish
DROP INDEX idx_users_email;

Ma'lumotlar bazasi sozlamalari

PRAGMA buyruqlari

# Foreign key cheklovlarini yoqish
PRAGMA foreign_keys = ON;

# Ma'lumotlar bazasi versiyasini ko'rish
PRAGMA user_version;

# Ma'lumotlar bazasi sahifasi hajmi
PRAGMA page_size;

# Ma'lumotlar bazasi sahifalari soni
PRAGMA page_count;

Amaliy loyiha

# Ma'lumotlar bazasini yaratish
sqlite3 library.db

# Jadvallar yaratish
CREATE TABLE authors (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    birth_year INTEGER,
    nationality TEXT
);

CREATE TABLE books (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    author_id INTEGER,
    isbn TEXT UNIQUE,
    publication_year INTEGER,
    pages INTEGER,
    price REAL,
    FOREIGN KEY (author_id) REFERENCES authors(id)
);

CREATE TABLE categories (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL UNIQUE,
    description TEXT
);

CREATE TABLE book_categories (
    book_id INTEGER,
    category_id INTEGER,
    PRIMARY KEY (book_id, category_id),
    FOREIGN KEY (book_id) REFERENCES books(id),
    FOREIGN KEY (category_id) REFERENCES categories(id)
);

# Indekslar yaratish
CREATE INDEX idx_books_title ON books(title);
CREATE INDEX idx_books_author ON books(author_id);
CREATE INDEX idx_authors_name ON authors(name);

# Ma'lumotlar qo'shish
INSERT INTO authors (name, birth_year, nationality) VALUES 
('Alisher Navoiy', 1441, 'O''zbek'),
('Abdulla Avloniy', 1878, 'O''zbek'),
('Chingiz Aytmatov', 1928, 'Qirg''iz');

INSERT INTO categories (name, description) VALUES 
('Adabiyot', 'Badiiy adabiyot'),
('Tarix', 'Tarixiy asarlar'),
('Falsafa', 'Falsafiy asarlar');

INSERT INTO books (title, author_id, isbn, publication_year, pages, price) VALUES 
('Xamsa', 1, '978-1234567890', 1495, 500, 25.50),
('Turkiy guliston', 1, '978-1234567891', 1499, 300, 20.00),
('O''zbek tili grammatikasi', 2, '978-1234567892', 1920, 200, 15.75);

# Jadvallarni ko'rish
.tables

# Strukturalarni ko'rish
.schema

# Ma'lumotlarni ko'rish
SELECT * FROM authors;
SELECT * FROM books;
SELECT * FROM categories;

Fayl boshqaruvi

Ma'lumotlar bazasini nusxalash

# Faylni nusxalash
cp mydatabase.db mydatabase_backup.db

# SQL formatida eksport qilish
.output backup.sql
.dump
.output stdout

Ma'lumotlar bazasini import qilish

# SQL fayldan import
.read backup.sql

# Yangi ma'lumotlar bazasiga import
sqlite3 new_database.db < backup.sql