MySQL & PostgreSQL Notes (English + Simple Hindi)

Complete RDBMS guide – click a topic to jump

Topics of MySQL & PostgreSQL Notes

1. Introduction to RDBMS / डेटाबेस का परिचय

English

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";
↑ Back to Top

2. Installation / इंस्टॉलेशन

English

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
↑ Back to Top

3. Connecting to Server / सर्वर से कनेक्ट करना

English

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)
↑ Back to Top

4. Data Types / डेटा प्रकार

English

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
);
↑ Back to Top

5. DDL (Data Definition Language) / डीडीएल

English

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);
↑ Back to Top

6. DML (Data Manipulation) / डीएमएल

English

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';
↑ Back to Top

7. SELECT Queries / डेटा देखना

English

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;
↑ Back to Top

8. Constraints / बाधाएँ (नियम)

English

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)
);
↑ Back to Top

9. Joins / दो टेबल जोड़ना

English

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;
↑ Back to Top

10. Aggregation (COUNT, SUM, AVG) / समूहीकरण

English

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;
↑ Back to Top

11. Indexes / इंडेक्स

English

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);
↑ Back to Top

12. Views / व्यू

English

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;
↑ Back to Top

13. Transactions (ACID) / ट्रांजैक्शन

English

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
↑ Back to Top

14. Functions & Stored Procedures / फंक्शन और प्रोसीजर

English

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');
↑ Back to Top

15. Backup & Restore / बैकअप और रिस्टोर

English

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
↑ Back to Top

16. User Management / यूजर और परमिशन

English

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;
↑ Back to Top

17. Advanced Features / उन्नत सुविधाएँ

English

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;
↑ Back to Top

18. MySQL vs PostgreSQL: Which to choose? / कौनसा चुनें?

English

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
↑ Back to Top