Complete RDBMS guide – click a topic to jump
What is a database? A database is an organized collection of data. A Relational Database Management System (RDBMS) stores data in tables (rows & columns) and uses SQL (Structured Query Language) for queries.
MySQL: World's most popular open-source RDBMS, known for speed and ease of use. Developed by Oracle, widely used in web apps (LAMP stack). [citation:1][citation:4]
PostgreSQL: Powerful open-source object-relational database, emphasizing standards compliance and extensibility. Supports advanced data types (JSONB, arrays) and complex queries. [citation:2][citation:3]
डेटाबेस क्या है? डेटाबेस डेटा का एक संगठित संग्रह होता है। RDBMS डेटा को टेबल (पंक्तियों और स्तंभों) में स्टोर करता है और SQL से क्वेरी करता है।
MySQL: दुनिया का सबसे लोकप्रिय ओपन-सोर्स RDBMS, तेज और आसान। वेब ऐप्स (जैसे WordPress) में ज्यादा इस्तेमाल। [citation:1]
PostgreSQL: उन्नत ओपन-सोर्स डेटाबेस, JSONB, array जैसे डेटा टाइप सपोर्ट करता है, जटिल क्वेरी के लिए मजबूत। [citation:2]
-- Both MySQL and PostgreSQL use SQL -- This is a comment SELECT "Hello Database";
MySQL: On Ubuntu: sudo apt install mysql-server. On Windows: use MySQL Installer from dev.mysql.com. After install, run mysql_secure_installation. [citation:1][citation:4]
PostgreSQL: On Ubuntu: sudo apt install postgresql postgresql-contrib. On Windows: use installer from postgresql.org. Default user postgres. [citation:5]
MySQL: उबंटू पर: sudo apt install mysql-server। विंडोज पर: MySQL Installer डाउनलोड करें।
PostgreSQL: उबंटू पर: sudo apt install postgresql। विंडोज पर: postgresql.org से installer।
# Check MySQL status sudo systemctl status mysql # Check PostgreSQL status sudo systemctl status postgresql
MySQL: mysql -u root -p (then enter password). [citation:1]
PostgreSQL: sudo -u postgres psql (or psql -U username -d dbname). [citation:5]
MySQL: mysql -u root -p – पासवर्ड डालकर कनेक्ट करें।
PostgreSQL: sudo -u postgres psql से कनेक्ट करें।
-- After connecting, both show prompt mysql> (for MySQL) postgres=# (for PostgreSQL)
Common: INT, VARCHAR(n), TEXT, DATE, TIMESTAMP, BOOLEAN.
MySQL-specific: TINYINT, ENUM, SET, DATETIME.
PostgreSQL-specific: JSONB (binary JSON), ARRAY, UUID, HSTORE, CIDR (network addresses). [citation:2][citation:3]
सामान्य: INT (पूर्णांक), VARCHAR (टेक्स्ट), DATE (तारीख), BOOLEAN (सही/गलत)।
PostgreSQL खास: JSONB – JSON डेटा स्टोर करने के लिए, ARRAY – सूची स्टोर करने के लिए।
-- MySQL
CREATE TABLE example (id INT, name VARCHAR(100));
-- PostgreSQL (with array and jsonb)
CREATE TABLE products (
id SERIAL PRIMARY KEY,
tags TEXT[],
metadata JSONB
);
CREATE DATABASE: CREATE DATABASE dbname;
CREATE TABLE: define columns and constraints.
ALTER TABLE: modify structure (ADD COLUMN, DROP COLUMN, etc.)
DROP TABLE: delete table.
CREATE DATABASE: नया डेटाबेस बनाना।
CREATE TABLE: नई टेबल बनाना, कॉलम और कंस्ट्रेंट्स देना।
ALTER TABLE: टेबल का ढांचा बदलना (नया कॉलम जोड़ना, पुराना हटाना)।
-- Create database
CREATE DATABASE school;
-- Use database
USE school; -- MySQL
\c school; -- PostgreSQL
-- Create table
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY, -- MySQL
-- id SERIAL PRIMARY KEY, -- PostgreSQL
name VARCHAR(100) NOT NULL,
age INT,
enrolled DATE DEFAULT CURRENT_DATE
);
-- Add column
ALTER TABLE students ADD COLUMN email VARCHAR(255);
INSERT: add rows.
UPDATE: modify existing rows.
DELETE: remove rows.
INSERT: नया डेटा डालना।
UPDATE: डेटा बदलना।
DELETE: डेटा हटाना।
INSERT INTO students (name, age) VALUES ('Raj', 20);
INSERT INTO students (name, age) VALUES ('Anjali', 22);
UPDATE students SET age = 21 WHERE name = 'Raj';
DELETE FROM students WHERE name = 'Anjali';
Basic SELECT: SELECT * FROM table;
WHERE clause: filter rows.
ORDER BY: sort.
LIMIT / OFFSET: pagination.
DISTINCT: unique values.
SELECT: डेटा देखने के लिए। WHERE शर्त लगाने के लिए। ORDER BY क्रम लगाने के लिए। LIMIT सीमित संख्या में रिकॉर्ड देखने के लिए।
SELECT name, age FROM students WHERE age > 18 ORDER BY age DESC LIMIT 5;
NOT NULL: column must have value.
UNIQUE: all values different.
PRIMARY KEY: unique identifier for each row.
FOREIGN KEY: links to another table.
CHECK: ensures condition (e.g., age > 0).
DEFAULT: default value if not provided.
NOT NULL: इस कॉलम में खाली नहीं छोड़ सकते।
UNIQUE: सभी मान अलग-अलग होने चाहिए।
PRIMARY KEY: हर पंक्ति की पहचान (UNIQUE + NOT NULL)।
FOREIGN KEY: दूसरी टेबल से लिंक।
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
amount DECIMAL(10,2) CHECK (amount > 0),
order_date DATE DEFAULT CURRENT_DATE,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
INNER JOIN: matching rows from both tables.
LEFT JOIN: all rows from left, matched from right (or NULL).
RIGHT JOIN: all from right, matched from left.
FULL OUTER JOIN: all rows from both (PostgreSQL supports, MySQL emulates with UNION).
INNER JOIN: दोनों टेबल में जो डेटा मेल खाता है, वही दिखाओ।
LEFT JOIN: बायीं टेबल का सारा डेटा, दायीं का मेल खाता हुआ (नहीं तो NULL)।
SELECT students.name, orders.amount FROM students INNER JOIN orders ON students.id = orders.student_id;
COUNT(), SUM(), AVG(), MAX(), MIN() – aggregate functions.
GROUP BY: group rows for aggregation.
HAVING: filter groups (like WHERE for groups).
COUNT: गिनती, SUM: जोड़, AVG: औसत।
GROUP BY: समूह बनाना (जैसे कक्षा के अनुसार छात्रों की संख्या)।
SELECT age, COUNT(*) AS count FROM students GROUP BY age HAVING COUNT(*) > 1;
Indexes speed up SELECT queries on large tables. They are like a book's index. Use on columns that appear in WHERE or JOIN. [citation:7]
MySQL: CREATE INDEX idx_name ON table(column);
PostgreSQL: same syntax, plus advanced index types (GIN, BRIN for JSONB).
इंडेक्स से डेटा ढूँढ़ना तेज हो जाता है। जिन कॉलम पर WHERE लगाते हैं, उन पर इंडेक्स बनाएँ।
CREATE INDEX idx_student_name ON students(name);
A view is a saved SELECT query, acts like a virtual table. Can simplify complex queries and restrict data access. [citation:2]
View एक सेव किया गया SELECT क्वेरी होता है, जैसे एक वर्चुअल टेबल। जटिल क्वेरी को आसान बनाने के लिए उपयोगी।
CREATE VIEW adult_students AS SELECT name, age FROM students WHERE age >= 18; SELECT * FROM adult_students;
Transactions group multiple operations into one unit. Either all succeed or none. ACID properties: Atomicity, Consistency, Isolation, Durability. [citation:7][citation:10]
Commands: BEGIN or START TRANSACTION, COMMIT, ROLLBACK.
PostgreSQL and MySQL (InnoDB) support transactions.
ट्रांजैक्शन में कई ऑपरेशन एक साथ हों, सब सफल तो COMMIT, नहीं तो ROLLBACK। बैंक ट्रांसफर के लिए जरूरी।
START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT; -- or ROLLBACK if error
MySQL: CREATE FUNCTION, CREATE PROCEDURE. [citation:10]
PostgreSQL: Supports multiple languages (SQL, PL/pgSQL, Python, etc.). [citation:2]
फंक्शन और प्रोसीजर डेटाबेस के अंदर ही प्रोग्राम लिखने की सुविधा देते हैं।
-- PostgreSQL function
CREATE FUNCTION get_age(name_param TEXT) RETURNS INT AS $$
SELECT age FROM students WHERE name = name_param;
$$ LANGUAGE SQL;
SELECT get_age('Raj');
MySQL: mysqldump -u root -p dbname > backup.sql. Restore: mysql -u root -p dbname < backup.sql. [citation:4][citation:10]
PostgreSQL: pg_dump dbname > backup.sql. Restore: psql dbname < backup.sql. [citation:2]
MySQL: mysqldump से बैकअप। PostgreSQL: pg_dump से बैकअप।
# MySQL backup mysqldump -u root -p school > school_backup.sql # PostgreSQL backup pg_dump school > school_backup.sql
MySQL: CREATE USER 'user'@'host' IDENTIFIED BY 'password';
GRANT ALL ON db.* TO 'user'@'host'; [citation:7]
PostgreSQL: CREATE USER username WITH PASSWORD 'pass';
GRANT ALL PRIVILEGES ON DATABASE db TO username; [citation:2]
नया यूजर बनाना और उसे डेटाबेस एक्सेस देना।
-- MySQL CREATE USER 'app'@'localhost' IDENTIFIED BY 'secret'; GRANT SELECT, INSERT ON school.* TO 'app'@'localhost'; -- PostgreSQL CREATE USER app WITH PASSWORD 'secret'; GRANT CONNECT ON DATABASE school TO app; GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA public TO app;
MySQL: Partitioning, full-text search, replication (master-slave, group replication), JSON functions (5.7+). [citation:7]
PostgreSQL: Table inheritance, window functions, recursive CTEs, foreign data wrappers (FDW), PostGIS (geospatial), custom extensions. [citation:2][citation:3]
PostgreSQL: JSONB, array, window functions, CTE (WITH क्वेरी) जैसी उन्नत सुविधाएँ।
-- PostgreSQL recursive CTE (find hierarchy)
WITH RECURSIVE subordinates AS (
SELECT id, name FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name FROM employees e
INNER JOIN subordinates s ON s.id = e.manager_id
) SELECT * FROM subordinates;
Choose MySQL if: You need a simple, fast, widely supported database for a web application (e.g., WordPress, e-commerce). Better for read-heavy workloads. Mature replication tools. [citation:3][citation:6]
Choose PostgreSQL if: You need advanced features (JSONB, array, custom types), complex queries, data integrity, and are building analytical applications or systems with strict compliance. Better for write-heavy and complex queries. [citation:3][citation:9]
Both are excellent; choose based on your project's specific needs. [citation:6][citation:9]
MySQL कब चुनें: जब वेब ऐप तेजी से बनाना है, रीड-हेवी वर्कलोड, ज्यादा कॉम्प्लेक्स फीचर नहीं चाहिए।
PostgreSQL कब चुनें: जब डेटा इंटीग्रिटी बहुत जरूरी हो, JSONB या array चाहिए, जटिल क्वेरी और एनालिटिक्स करनी हो।
-- MySQL is simpler, PostgreSQL is more feature-rich -- Test with your specific workload