đ¸ SQL āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻĒā§āϰāĻļā§āύ āĻ āĻāϤā§āϤāϰāĻ
āĻĒā§āϰāĻļā§āύ ā§§: SQL āĻā§?
āĻāϤā§āϤāϰ:
SQL (Structured Query Language) āĻšāϞ⧠āĻāĻāĻāĻŋ āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ āϞā§āϝāĻžāĻā§āĻā§ā§ā§āĻ āϝāĻž āĻĄā§āĻāĻžāĻŦā§āĻāϏ⧠āĻĄā§āĻāĻž insert, update, delete āĻāĻŦāĻ query āĻāϰāĻžāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§āĨ¤
āĻĒā§āϰāĻļā§āύ ⧍: SELECT, INSERT, UPDATE āĻ DELETE āĻāϰ āĻāĻžāĻ āĻā§?
āĻāϤā§āϤāϰ:
-
SELECTâ āĻĄā§āĻāĻžāĻŦā§āĻāϏ āĻĨā§āĻā§ āĻĄā§āĻāĻž āĻĒā§āϤ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§ -
INSERTâ āύāϤā§āύ āĻĄā§āĻāĻž āϝā§āĻ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§ -
UPDATEâ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĄā§āĻāĻž āĻāĻĒāĻĄā§āĻ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§ -
DELETEâ āĻĄā§āĻāĻž āĻŽā§āĻā§ āĻĢā§āϞāϤ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§
āĻĒā§āϰāĻļā§āύ ā§Š: WHERE āĻāĻŦāĻ HAVING āĻāϰ āĻŽāϧā§āϝ⧠āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻā§?
āĻāϤā§āϤāϰ:
WHERE āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšā§ row āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŦāĻ āĻāĻāĻŋ GROUP BY āĻāϰ āĻāĻā§ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§āĨ¤
HAVING āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšā§ aggregate result (āϝā§āĻŽāύ COUNT(), SUM()) āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰāϤ⧠āĻāĻŦāĻ āĻāĻāĻŋ GROUP BY āĻāϰ āĻĒāϰ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§āĨ¤
āĻĒā§āϰāĻļā§āύ ā§Ē: GROUP BY āĻā§ āĻāĻžāĻā§ āϞāĻžāĻā§?
āĻāϤā§āϤāϰ:
GROUP BY āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§ āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ āĻāϞāĻžāĻŽā§āϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻĄā§āĻāĻž āĻā§āϰā§āĻĒ āĻāϰāϤā§, āϏāĻžāϧāĻžāϰāĻŖāϤ aggregate function āĻāϰ āϏāĻžāĻĨā§āĨ¤
āĻĒā§āϰāĻļā§āύ ā§Ģ: Index āĻā§ āĻāĻŦāĻ āĻā§āύ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§?
āĻāϤā§āϤāϰ:
Index āĻšāϞ⧠āĻĄā§āĻāĻžāĻŦā§āĻāϏā§āϰ āĻāĻāĻāĻŋ āĻĄā§āĻāĻž āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āϝāĻž āĻĻā§āϰā§āϤ āϏāĻžāϰā§āĻ āĻ āϰāĻŋāĻā§āϰāĻžāĻāĻāĻžāϞ āϏā§āĻŦāĻŋāϧāĻž āĻĻā§ā§āĨ¤ āĻāĻāĻŋ query execution āĻĻā§āϰā§āϤ āĻāϰāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰā§āĨ¤
đ¸ āĻĄā§āĻāĻžāĻŦā§āĻāϏ āĻĄāĻŋāĻāĻžāĻāύ āĻ āĻāύāϏā§āĻĒā§āĻ āĻĒā§āϰāĻļā§āύāĻ
āĻĒā§āϰāĻļā§āύ ā§Ŧ: Normalization āĻā§?
āĻāϤā§āϤāϰ:
Normalization āĻšāϞ⧠āĻāĻāĻāĻŋ āĻĒā§āϰāĻā§āϰāĻŋā§āĻž āϝāĻž āĻĄā§āĻāĻžāĻŦā§āĻāϏāĻā§ redundancy (āĻāĻāĻ āĻĄā§āĻāĻž āĻŦāĻžāϰāĻŦāĻžāϰ āϰāĻžāĻāĻž) āĻāĻŽāĻŋā§ā§ āĻāĻŦāĻ āĻĄā§āĻāĻž integrity āĻŦāĻžā§āĻŋā§ā§ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻ āĻāϰā§āĨ¤
Database-āĻ data organize āĻ duplicate āĻāĻŽāĻžāύā§āϰ āĻāύā§āϝ āϝ⧠process use āĻāϰāĻž āĻšā§, āϤāĻžāĻā§ normalization āĻŦāϞā§āĨ¤
āĻāϰ āĻŽāϧā§āϝ⧠1NF, 2NF, 3NF āĻšāϞ⧠common levelsāĨ¤
āĻĒā§āϰāĻļā§āύ ā§: 1NF, 2NF, 3NF āĻā§?
āĻāϤā§āϤāϰ:
-
1NF: āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏā§āϞ āĻā§āϝāĻžāĻāĻŽāĻŋāĻ āĻā§āϝāĻžāϞ⧠āϰāĻžāĻā§ -
2NF: 1NF + āϏāĻŽā§āĻĒā§āϰā§āĻŖ primary key āύāĻŋāϰā§āĻāϰāĻļā§āϞāϤāĻž -
3NF: 2NF + āĻā§āϰāĻžāύāĻāĻŋāĻāĻŋāĻ āύāĻŋāϰā§āĻāϰāĻļā§āϞāϤāĻž āĻĻā§āϰ āĻāϰāĻž
đš 1NF (First Normal Form)
đ Rule:
- Column-āĻ atomic value āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§ (array / multiple value āύāĻž)
- Repeating group āĻĨāĻžāĻāĻž āϝāĻžāĻŦā§ āύāĻž
â Wrong:
| id | phones |
|---|---|
| 1 | 017,018 |
â 1NF:
| id | phone |
|---|---|
| 1 | 017 |
| 2 | 018 |
đ Problem solve:
- Data parsing complexity āĻāĻŽāĻžā§
- Query āϏāĻšāĻ āĻšā§
đš 2NF (Second Normal Form)
đ Rule:
- 1NF follow āĻāϰāϤ⧠āĻšāĻŦā§
- P*artial dependency remove āĻāϰāϤ⧠āĻšāĻŦā§* (composite key āĻšāϞā§)
â Wrong:
| order_id | product_id | product_name |
|---|
đ product_name āĻļā§āϧ⧠product_id-āĻāϰ āĻāĻĒāϰ depend āĻāϰā§
â 2NF:
orders table
| order_id | product_id |
products table
| product_id | product_name |
đ Problem solve:
- Duplicate data āĻāĻŽā§
- Update anomaly āĻāĻŽā§
đš 3NF (Third Normal Form)
đ Rule:
- 2NF follow āĻāϰāϤ⧠āĻšāĻŦā§
- Transitive dependency remove āĻāϰāϤ⧠āĻšāĻŦā§
â Wrong:
| user_id | city_id | city_name |
đ city_name depends on city_id, not user_id
â 3NF:
users table
| user_id | city_id |
cities table
| city_id | city_name |
đ Problem solve:
- Data inconsistency āĻāĻŽā§
- Update anomaly eliminate āĻšā§
đĨ Summary (Quick View)
| Form | Focus | Problem Solved |
|---|---|---|
| 1NF | Atomic data | Multiple value issue |
| 2NF | Partial dependency | Duplicate data |
| 3NF | Transitive dependency | Inconsistency |
đ Laravel Example
āϧāϰ⧠āϤā§āĻŽāĻŋ e-commerce system āĻŦāĻžāύāĻžāĻā§āĻā§ đ
â Non-normalized (Bad āĻĄāĻŋāĻāĻžāĻāύ)
Schema::create('orders', function (Blueprint $table) {
$table->id();
$table->string('product_name');
$table->string('category_name');
});
đ Problem:
- Duplicate data
- Update āĻāϰāϞ⧠mismatch āĻšāĻŦā§
â
3NF Design (Best Practice)
// products table
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->foreignId('category_id');
});
// categories table
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
});
// orders table
Schema::create('orders', function (Blueprint $table) {
$table->id();
$table->foreignId('product_id');
});
đš Eloquent Relationship
// Product.php
public function category() {
return $this->belongsTo(Category::class);
}
// Order.php
public function product() {
return $this->belongsTo(Product::class);
}
đ§ Insight (Impress āĻāϰāĻžāϰ āĻāύā§āϝ)
đ Normalization = data integrity + scalability
âī¸ Large system-āĻ must
âī¸ Over-normalization āĻāϰāϞ⧠performance issue āĻšāϤ⧠āĻĒāĻžāϰ⧠â āϤāĻāύ denormalization use āĻāϰāĻž āĻšā§
đ¯ Short Interview Version:
"1NF ensures atomic data, 2NF removes partial dependency, and 3NF removes transitive dependency. These normalization forms reduce redundancy and prevent data inconsistency. In Laravel, we implement this by separating data into related tables using foreign keys and Eloquent relationships."
āĻĒā§āϰāĻļā§āύ ā§Ž: Primary Key āĻāĻŦāĻ Unique Key āĻāϰ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻā§?
āĻāϤā§āϤāϰ:
-
Primary Key â
āĻĒā§āϰāϤāĻŋāĻāĻŋ row āĻā§ āĻāĻāύāĻŋāĻāĻāĻžāĻŦā§āĻļāύāĻžāĻā§āϤ āĻāϰā§,null āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰ⧠āύāĻž -
Unique Key â
āĻāĻāύāĻŋāĻ āĻŽāĻžāύāϰāĻžāĻāϤ⧠āĻĒāĻžāϰā§, āϤāĻŦā§āĻāĻāĻŦāĻžāϰ nullāĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§
āĻĒā§āϰāĻļā§āύ ⧝: Foreign Key āĻā§?
āĻāϤā§āϤāϰ:
āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāϞā§āϰ āĻāϞāĻžāĻŽ āϝāĻž āĻ
āύā§āϝ āĻā§āĻŦāĻŋāϞā§āϰ Primary Key āĻā§ āϰā§āĻĢāĻžāϰ āĻāϰā§, āĻāĻāĻžāĻā§ Foreign Key āĻŦāϞā§āĨ¤
āĻĒā§āϰāĻļā§āύ ā§§ā§Ļ: ACID āĻŽāĻžāύ⧠āĻā§ āĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§? āĻāĻĻāĻžāĻšāϰāĻŖ āϏāĻš āĻŦā§āϝāĻžāĻā§āϝāĻž āĻāϰā§?
āĻāϤā§āϤāϰ:
đ¸ ACID āĻā§?
ACID āĻšāϞ⧠āĻĄā§āĻāĻžāĻŦā§āĻāϏ⧠āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻžāϰ ā§ĒāĻāĻŋ āĻŽā§āϞāĻŋāĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āϝāĻž āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰ⧠āϝ⧠āĻĄā§āĻāĻžāĻŦā§āĻāϏ⧠āĻĄā§āĻāĻž āύāĻŋāϰā§āĻā§āϞ, āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āĻ āϏā§āϰāĻā§āώāĻŋāϤ āĻĨāĻžāĻāĻŦā§āĨ¤
ACID āĻāϰ āĻĒā§āϰ⧠āĻ
āϰā§āĻĨ:
- A â Atomicity
- C â Consistency
- I â Isolation
- D â Durability
đš 1. Atomicity (āĻĒāϰāĻŽāĻžāĻŖāĻŦāĻŋāĻāϤāĻž)
āĻŦā§āϝāĻžāĻā§āϝāĻž: āĻāĻāĻāĻŋ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āϏāĻĢāϞ āĻšāϤ⧠āĻšāĻŦā§ āĻ
āĻĨāĻŦāĻž āĻāĻāĻĻāĻŽāĻ āĻšāĻŦā§ āύāĻžāĨ¤ āĻāĻāĻļāĻŋāĻāĻāĻžāĻŦā§ āĻā§āύ āĻāĻžāĻ āĻšāĻŦā§ āύāĻžāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
āϧāϰā§, āĻāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āϤāĻžāϰ āĻāĻāĻžāĻāύā§āĻ āĻĨā§āĻā§ āĻāĻžāĻāĻž āĻā§āϰāĻžāύā§āϏāĻĢāĻžāϰ āĻāϰāĻā§ āĻ
āύā§āϝ āĻāĻāĻžāĻāύā§āĻā§āĨ¤
- āĻĒā§āϰāĻĨāĻŽā§ āĻāĻžāĻāĻž āĻāĻžāĻāĻŦā§
- āϤāĻžāϰāĻĒāϰ āϏā§āĻ āĻāĻžāĻāĻž āĻ āύā§āϝ āĻāĻāĻžāĻāύā§āĻā§ āϝā§āĻ āĻšāĻŦā§
āϝāĻĻāĻŋ āĻĒā§āϰāĻĨāĻŽ āϧāĻžāĻĒā§ āĻāĻžāĻāĻž āĻāĻžāĻā§ āĻāĻŋāύā§āϤ⧠āĻĻā§āĻŦāĻŋāϤā§ā§ āϧāĻžāĻĒā§ āĻā§āύ⧠āĻāĻžāϰāĻŖā§ āϝā§āĻ āύāĻž āĻšā§, āϤāĻžāĻšāϞ⧠āĻĒā§āϰ⧠āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ rollback āĻšā§ā§ āϝāĻžāĻŦā§āĨ¤ āĻ āϰā§āĻĨāĻžā§, āĻāĻžāĻāĻž āĻāĻžāĻāĻž āĻšāĻŦā§ āύāĻž â āĻāĻāĻž AtomicityāĨ¤
đš 2. Consistency (āϏāĻžāĻŽāĻā§āĻāϏā§āϝāϤāĻž)
āĻŦā§āϝāĻžāĻā§āϝāĻž: āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύā§āϰ āĻĒāϰ⧠āĻĄā§āĻāĻžāĻŦā§āĻāϏ āĻ āĻŦāĻļā§āϝāĻ āĻāĻāĻāĻŋ valid āĻŦāĻž consistent state āĻ āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
āϧāϰ⧠āĻŦā§āϝāĻžāϞā§āύā§āϏ āĻā§āϰāĻžāύā§āϏāĻĢāĻžāϰ āĻāϰāĻžāϰ āύāĻŋā§āĻŽ āĻšāϞ⧠â āĻāĻāĻžāĻāύā§āĻā§ āύā§āϝā§āύāϤāĻŽ ā§Ģā§Ļā§Ļ āĻāĻžāĻāĻž āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§āĨ¤
āϝāĻĻāĻŋ ⧍ā§Ļā§Ļ āĻāĻžāĻāĻž āĻĨāĻžāĻāĻž āĻ
āĻŦāϏā§āĻĨāĻžā§ ā§§ā§Ļā§Ļ āĻāĻžāĻāĻž āĻā§āϰāĻžāύā§āϏāĻĢāĻžāϰ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§, āϤāĻžāĻšāϞ⧠consistency rule āĻā§āĻā§ āϝāĻžāĻŦā§, āϤāĻžāĻ āĻāĻŽāύ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āϏāĻĢāϞ āĻšāĻŦā§ āύāĻžāĨ¤
đš 3. Isolation (āĻĒā§āĻĨāĻāϤāĻž)
āĻŦā§āϝāĻžāĻā§āϝāĻž: āĻāĻāĻžāϧāĻŋāĻ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻāĻāϏāĻžāĻĨā§ āĻāϞāϞā§āĻ, āϤāĻžāϰāĻž āϝā§āύ āĻāĻā§ āĻ
āĻĒāϰā§āϰ āĻāĻĒāϰ āĻĒā§āϰāĻāĻžāĻŦ āύāĻž āĻĢā§āϞ⧠āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻāĻŋāϰ āϰā§āĻāĻžāϞā§āĻ āϝā§āύ āĻāϞāĻžāĻĻāĻž āĻāĻžāĻŦā§āĻ āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āĻĨāĻžāĻā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
āϧāϰ⧠āĻāĻāĻ āϏāĻŽā§ āĻĻā§āĻāĻāύ āĻāĻāĻāĻžāϰ āĻāĻāĻžāĻāύā§āĻ āĻŦā§āϝāĻžāϞā§āύā§āϏ āĻāĻĒāĻĄā§āĻ āĻāϰāĻā§āĨ¤ Isolation āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰ⧠āϝā§āύ āĻāĻāĻāĻŋāϰ āĻāĻĒāĻĄā§āĻ āĻ
āύā§āϝāĻāĻŋāϰ āĻĄā§āĻāĻž corrupt āύāĻž āĻāϰā§āĨ¤ āύāĻž āĻšāϞ⧠race condition āĻŦāĻž dirty read āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
đš 4. Durability (āϏā§āĻĨāĻžā§āĻŋāϤā§āĻŦ)
āĻŦā§āϝāĻžāĻā§āϝāĻž: āĻāĻāĻŦāĻžāϰ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āϏāĻĢāϞ āĻšāϞ⧠āϤāĻž āϏā§āĻĨāĻžā§ā§āĻāĻžāĻŦā§ āĻĄā§āĻāĻžāĻŦā§āĻāϏ⧠āĻĨā§āĻā§ āϝāĻžāĻŦā§, āϏāĻžāϰā§āĻāĻžāϰ āϰāĻŋāϏā§āĻāĻžāϰā§āĻ āĻšāϞā§āĻ āĻŽā§āĻā§ āϝāĻžāĻŦā§ āύāĻžāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
āĻāĻāĻāύ āĻāĻāĻāĻžāϰ āĻĒā§āĻŽā§āύā§āĻ āĻāϰ⧠āĻāĻŦāĻ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āϏāĻĢāϞ āĻšā§āĨ¤ āĻāϰāĻĒāϰ āĻšāĻ āĻžā§ āϏāĻžāϰā§āĻāĻžāϰ āĻŦāύā§āϧ āĻšā§ā§ āϝāĻžā§āĨ¤ āĻāĻŋāύā§āϤ⧠āϝāĻāύ āĻāĻŦāĻžāϰ āĻāĻžāϞ⧠āĻšā§, āϤāĻāύāĻ āϏā§āĻ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻĄā§āĻāĻžāĻŦā§āĻāϏ⧠āĻĒāĻžāĻā§āĻž āϝāĻžā§āĨ¤ āĻāĻāĻžāĻ DurabilityāĨ¤
đ§ ACID āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻā§āύ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ?
- āĻĄā§āĻāĻž corruption āϰā§āϧ āĻāϰā§
- āĻĄā§āĻāĻžāϰ āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝāϤāĻž āĻŦāĻāĻžā§ āϰāĻžāĻā§
- āĻŦā§āϝāĻžāĻā§āĻāĻŋāĻ, e-commerce āĻŦāĻž multi-user system āĻ consistency āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§
- āϏāĻžāϰā§āĻāĻžāϰ failure āĻšāϞā§āĻ data safe āĻĨāĻžāĻā§
â āϏāĻāĻā§āώā§āĻĒā§ āĻŽāύ⧠āϰāĻžāĻāĻžāϰ āĻāĻŋāĻĒāϏ:
| āĻŦā§āĻļāĻŋāώā§āĻā§āϝ | āĻā§ āĻāϰ⧠| āĻāĻĻāĻžāĻšāϰāĻŖ |
|---|---|---|
| Atomicity | āϏāĻŦ āĻŦāĻž āĻāĻŋāĻā§āĻ āύāĻž | āĻāĻžāĻāĻž āĻā§āϰāĻžāύā§āϏāĻĢāĻžāϰ āĻāϰāϞ⧠āĻĻā§āĻāĻĒāĻžāĻļā§ āϏāĻĢāϞ āĻšāϤ⧠āĻšāĻŦā§ |
| Consistency | āύāĻŋāϝāĻŧāĻŽ āĻŽāĻžāύāĻž | āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύā§āϰ āĻĒāϰ āϰā§āϞ āĻāĻžāĻāĻž āϝāĻžāĻŦā§ āύāĻž |
| Isolation | āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻāϞāĻžāĻĻāĻž | āĻāĻāϏāĻžāĻĨā§ āĻāĻāĻžāϧāĻŋāĻ update āĻšāϞā§āĻ āĻāĻĄāĻŧāĻŽāĻŋāϞ āĻšāĻŦā§ āύāĻž |
| Durability | āϏā§āĻĨāĻžāϝāĻŧā§ āĻāϰ⧠| āϏāĻĢāϞ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻšāĻžāϰāĻžāĻŦā§ āύāĻž |
đ¸ SQL JOIN āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻĒā§āϰāĻļā§āύ āĻ āĻāϤā§āϤāϰāĻ
āĻĒā§āϰāĻļā§āύ ā§§ā§§: SQL JOIN āĻā§?
āĻāϤā§āϤāϰ:
JOIN āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻžāϧāĻŋāĻ āĻā§āĻŦāĻŋāϞ āĻĨā§āĻā§ āϏāĻŽā§āĻĒāϰā§āĻāϝā§āĻā§āϤ āĻĄā§āĻāĻž āĻāĻāϤā§āϰ⧠āĻāύāĻž āĻšā§āĨ¤
āĻĒā§āϰāĻļā§āύ ⧧⧍: INNER JOIN āĻā§?
āĻāϤā§āϤāϰ:
āĻĻā§āĻ āĻā§āĻŦāĻŋāϞā§āϰ āϝā§āϏāĻŦ āϰā§āĻāϰā§āĻĄ āĻŽā§āϝāĻžāĻ āĻāϰ⧠āĻā§āĻŦāϞ āϏā§āĻā§āϞā§āĻ āĻĻā§āĻāĻžā§āĨ¤
āĻĒā§āϰāĻļā§āύ ā§§ā§Š: LEFT JOIN āĻāĻŦāĻ RIGHT JOIN āĻāϰ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻā§?
āĻāϤā§āϤāϰ:
-
LEFT JOIN: āĻŦāĻžāĻŽ āĻā§āĻŦāĻŋāϞā§āϰ āϏāĻŦ āϰā§āĻāϰā§āĻĄ āĻāĻŦāĻ āĻĄāĻžāύ āĻā§āĻŦāĻŋāϞā§āϰ āĻŽā§āϝāĻžāĻ āĻāϰāĻž āϰā§āĻāϰā§āĻĄ -
RIGHT JOIN: āĻĄāĻžāύ āĻā§āĻŦāĻŋāϞā§āϰ āϏāĻŦ āϰā§āĻāϰā§āĻĄ āĻāĻŦāĻ āĻŦāĻžāĻŽ āĻā§āĻŦāĻŋāϞā§āϰ āĻŽā§āϝāĻžāĻ āĻāϰāĻž āϰā§āĻāϰā§āĻĄ
āĻĒā§āϰāĻļā§āύ ā§§ā§Ē: FULL OUTER JOIN āĻā§ āĻāϰā§?
āĻāϤā§āϤāϰ:
āĻĻā§āĻ āĻā§āĻŦāĻŋāϞā§āϰ āϏāĻŦ āϰā§āĻāϰā§āĻĄ āĻĻā§āĻāĻžā§, āϝāĻĻāĻŋ āύāĻž āĻŽā§āϝāĻžāĻ āĻāϰ⧠āϤāĻŦā§ null āĻĻā§āĻāĻžā§āĨ¤
āĻĒā§āϰāĻļā§āύ ā§§ā§Ģ: SELF JOIN āĻā§?
āĻāϤā§āϤāϰ:
āϝāĻāύ āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāϞāĻā§ āύāĻŋāĻā§āϰ āϏāĻžāĻĨā§āĻ JOIN āĻāϰāĻž āĻšā§ āϤāĻāύ āϤāĻžāĻā§ SELF JOIN āĻŦāϞā§āĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻšāĻžā§āĻžāϰāĻžāϰā§āĻāĻŋāĻāĻžāϞ āĻĄā§āĻāĻž (āϝā§āĻŽāύ employee-manager) āĻāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§āĨ¤
āĻĒā§āϰāĻļā§āύ 16: View āĻāĻŦāĻ Materialized View āĻāϰ āĻŽāϧā§āϝ⧠āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻā§?
āĻāϤā§āϤāϰ:
-
ViewāĻšāϞ⧠āĻāĻāĻāĻŋ āĻāĻžāϰā§āĻā§ā§āĻžāϞ āĻā§āĻŦāĻŋāϞ āϝāĻž āĻāĻāĻāĻŋ SQL query āĻāϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āϤā§āϰāĻŋ āĻšā§āĨ¤ āĻāϤ⧠āĻŽā§āϞ āĻĄā§āĻāĻž āĻĨāĻžāĻā§ āύāĻž, āĻā§āĻŦāϞ query āĻāϞā§āĨ¤ -
Materialized ViewāĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻāĻŋāĻ āϝā§āĻāĻŋ query āĻāϰ āϰā§āĻāĻžāϞā§āĻāĻā§ āĻĢāĻŋāĻāĻŋāĻā§āϝāĻžāϞāĻŋ āϏā§āĻā§āϰ āĻāϰ⧠āϰāĻžāĻā§, āĻĢāϞ⧠āĻĻā§āϰā§āϤ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻĒāĻžāĻā§āĻž āϝāĻžā§āĨ¤
āĻĒā§āϰāĻļā§āύ 17: Stored Procedure āĻ Function āĻāϰ āĻŽāϧā§āϝ⧠āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻā§?
āĻāϤā§āϤāϰ:
-
Stored ProcedureāĻāĻāĻžāϧāĻŋāĻ āϏā§āĻā§āĻāĻŽā§āύā§āĻā§āϰ āϏāĻŽāύā§āĻŦāϝāĻŧā§ āϤā§āϰāĻŋ āĻāĻŦāĻ āĻāĻāĻŋ return āύāĻž-āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ -
FunctionāϏāϰā§āĻŦāĻĻāĻž āĻāĻāĻāĻŋ āĻŽāĻžāύ return āĻāϰ⧠āĻāĻŦāĻ āϏāĻžāϧāĻžāϰāĻŖāϤ SELECT statement āĻāϰ āĻŽāϧā§āϝ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšā§āĨ¤
āĻĒā§āϰāĻļā§āύ 18: Index āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§? āĻāĻŦāĻ āĻāĻāύ Index āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻāĻāĻŋāϤ āύā§?
āĻāϤā§āϤāϰ:
Index āĻĄā§āĻāĻž āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ (āϝā§āĻŽāύ B-Tree) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāĻžāϰā§āĻ āĻ
āĻĒāĻžāϰā§āĻļāύ āĻĻā§āϰā§āϤ āĻāϰā§āĨ¤
Index āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻāĻāĻŋāϤ āύ⧠āϝāĻĻāĻŋ:
- āĻāĻĒāύāĻŋ āĻā§āĻŦāĻ āĻā§āĻ āĻā§āĻŦāĻŋāϞ āύāĻŋā§ā§ āĻāĻžāĻ āĻāϰāĻā§āύ
- āĻāĻĒāύāĻŋ āĻĒā§āϰāĻā§āϰ insert/update/delete āĻāϰāĻā§āύ (āĻāĻžāϰāĻŖ āĻāĻā§āϞ⧠index āϰāĻŋāĻĢā§āϰā§āĻļ āĻāϰāϤ⧠āĻšā§)
- āĻāĻĒāύāĻŋ āĻāĻŽāύ āĻāϞāĻžāĻŽā§ index āĻāϰāĻā§āύ āϝā§āĻāĻžāύ⧠āĻā§āϝāĻžāϞā§āĻā§āϞā§āϰ āĻā§āϝāĻžāϰāĻŋā§ā§āĻļāύ āĻā§āĻŦ āĻāĻŽ (low cardinality)
āĻĒā§āϰāĻļā§āύ 19: Query Optimization āĻā§āĻāĻžāĻŦā§ āĻāϰāĻŦā§āύ?
āĻāϤā§āϤāϰ:
- āĻĒā§āϰā§ā§āĻāύāĻšā§āύ
SELECT *āĻŦāĻžāĻĻ āĻĻāĻŋā§ā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϞāĻžāĻŽ āĻŦā§āĻā§ āύāĻŋāύ - Index āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ
- Subquery āĻāϰ āĻŦāĻĻāϞ⧠JOIN āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ
-
Query Execution Plan (EXPLAIN)āĻĻā§āĻā§ āĻŦā§āĻā§āύ āĻā§āĻĨāĻžā§ āϏāĻŽā§ āĻŦā§āĻļāĻŋ āϞāĻžāĻāĻā§ - Aggregate query āĻā§āϞā§āϤ⧠GROUP BY āϏāĻžāĻŦāϧāĻžāύ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ
āĻĒā§āϰāĻļā§āύ 20: Database Sharding āĻ Replication āĻāϰ āĻŽāϧā§āϝ⧠āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻā§?
āĻāϤā§āϤāϰ:
- Sharding: āĻĄā§āĻāĻž āĻā§ horizontally āĻŦāĻŋāĻāĻŋāύā§āύ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻžāĻ āĻāϰ⧠āϰāĻžāĻā§ (āĻŦā§ āĻĄā§āĻāĻžāĻŦā§āĻāϏ⧠āϞā§āĻĄ āĻāĻŽāĻžāϤā§)
- Replication: āĻāĻāĻ āĻĄā§āĻāĻž āĻāĻāĻžāϧāĻŋāĻ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻĒāĻŋ āĻāϰ⧠āϰāĻžāĻāĻž āĻšā§ (failover āĻ read-performance āĻŦāĻžā§āĻžāϤā§)
āĻĒā§āϰāĻļā§āύ 21: Deadlock āĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāĻŦā§āύ?
āĻāϤā§āϤāϰ:
Deadlock āϤāĻāύ āĻāĻā§ āϝāĻāύ āĻĻā§āĻāĻŋ āĻŦāĻž āϤāϤā§āϧāĻŋāĻ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻāĻā§ āĻ
āĻĒāϰā§āϰ āϰāĻŋāϏā§āϰā§āϏā§āϰ āĻāύā§āϝ āĻ
āĻĒā§āĻā§āώāĻž āĻāϰāϤ⧠āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻā§āĻāĻ āĻāĻžāĻ āĻļā§āώ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤
Deadlock āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāĻžāϰ āĻāĻĒāĻžā§āĻ
- āϞāĻ āύā§āĻŦāĻžāϰ order āĻ āĻŋāĻ āϰāĻžāĻāĻž
- āĻā§āĻ transaction āϰāĻžāĻāĻž
- Retry mechanism āϝā§āĻā§āϤ āĻāϰāĻž
- Timeout āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž
āĻĒā§āϰāĻļā§āύ 22: ORM (āϝā§āĻŽāύ Eloquent) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞ⧠performance issue āĻšāϤ⧠āĻĒāĻžāϰ⧠āĻā§āύ?
āĻāϤā§āϤāϰ:
- Eager loading āύāĻž āĻāϰāϞā§
N+1problem āĻšā§ - Unnecessary query generate āĻšā§ āϝāĻĻāĻŋ āϝāĻĨāĻžāϝāĻĨāĻāĻžāĻŦā§
scope āĻŦāĻž relationship define āύāĻž āĻāϰāĻž āĻšā§ - Raw SQL āĻŦāĻž
optimized query āĻŦā§āϝāĻŦāĻšāĻžāϰā§performance āĻ āύā§āĻ āĻŦā§ā§ā§ āϝā§āϤ⧠āĻĒāĻžāϰ⧠ORM āĻāϰ āϤā§āϞāύāĻžā§
āĻĒā§āϰāĻļā§āύ 23: Eager Loading vs Lazy Loading â āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻā§?
āĻāϤā§āϤāϰ:
- Eager Loading: āĻāĻāϏāĻžāĻĨā§ related āĻĄā§āĻāĻž āϞā§āĻĄ āĻāϰ⧠(query optimization friendly)
- Lazy Loading: āϝāĻāύ āĻĒā§āϰā§ā§āĻāύ āĻšā§ āϤāĻāύ related āĻĄā§āĻāĻž āϞā§āĻĄ āĻāϰ⧠(āϧā§āϰ⧠āĻāĻžāĻ āĻāϰā§, N+1 problem āĻšāϤ⧠āĻĒāĻžāϰā§)
āĻĒā§āϰāĻļā§āύ 24: Transaction isolation level āĻā§āϞ⧠āĻā§ āĻā§?
āĻāϤā§āϤāϰ:
-
Read Uncommitted:āĻ āύā§āϝ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻĨā§āĻā§ uncommitted āĻĄā§āĻāĻž āĻĒā§āĻž āϝāĻžā§ (Dirty Read) -
Read Committed: āĻā§āĻŦāϞ committed āĻĄā§āĻāĻž āĻĒā§ā§ -
Repeatable Read: āĻāĻāĻ query āĻŦāĻžāϰāĻŦāĻžāϰ āĻāϰāϞ⧠āĻāĻāĻ āϰā§āĻāĻžāϞā§āĻ āĻĒāĻžāĻŦā§āύ -
Serializable: āϏāϰā§āĻŦā§āĻā§āĻ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž, āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻāĻā§ āĻ āĻĒāϰā§āϰ āĻŽāϤ⧠behave āĻāϰ⧠āϝā§āύ āϏāĻŋāĻā§āĻā§āϞ āĻĨā§āϰā§āĻĄā§ āĻšāĻā§āĻā§
āĻĒā§āϰāĻļā§āύ 25: âEXPLAINâ āĻāĻŽāĻžāύā§āĻĄ āĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§?
āĻāϤā§āϤāϰ:
EXPLAIN āĻāĻŽāĻžāύā§āĻĄ āĻĻāĻŋā§ā§ SQL query āĻāϰ execution plan āĻĻā§āĻāĻž āϝāĻžā§āĨ¤ āĻāĻāĻŋ āĻĻā§āĻāĻžā§ āĻā§āύ āĻā§āĻŦāĻŋāϞ āĻāĻāύ āϏā§āĻā§āϝāĻžāύ āĻšāĻā§āĻā§, āĻā§āύ index āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāĻā§āĻā§ āĻāϤā§āϝāĻžāĻĻāĻŋ â performance tuning āĻāϰ āĻāύā§āϝ āĻāĻāĻŋ āĻā§āĻŦ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖāĨ¤
āĻĒā§āϰāĻļā§āύ 26: SQL āĻāϰ āĻā§āϝāĻžāĻāĻžāĻāϰāĻŋāĻā§āϞ⧠āĻ āϤāĻžāĻĻā§āϰ āĻāĻžāĻ?
āĻāϤā§āϤāϰ:
i. DDL (Data Definition Language)
đ āĻāĻĻā§āĻĻā§āĻļā§āϝ: āĻĄā§āĻāĻžāĻŦā§āĻāϏā§āϰ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āĻŦāĻž āϏā§āĻāĻŋāĻŽāĻž āϤā§āϰāĻŋ āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāĨ¤
| āĻāĻŽāĻžāύā§āĻĄ | āĻŦā§āϝāĻžāĻā§āϝāĻž |
|---|---|
| CREATE | āύāϤā§āύ āĻā§āĻŦāĻŋāϞ āĻŦāĻž āĻ āĻŦāĻā§āĻā§āĻ āϤā§āϰāĻŋ āĻāϰ⧠|
| ALTER | āĻā§āĻŦāĻŋāϞā§āϰ āĻāĻ āύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠|
| DROP | āĻā§āĻŦāĻŋāϞ āĻŦāĻž āĻ āĻŦāĻā§āĻā§āĻ āĻĄāĻŋāϞāĻŋāĻ āĻāϰ⧠|
| TRUNCATE | āĻā§āĻŦāĻŋāϞ āĻāĻžāϞāĻŋ āĻāϰ⧠(structure āĻĨāĻžāĻā§) |
| RENAME | āĻā§āĻŦāĻŋāϞ āĻŦāĻž āĻāϞāĻžāĻŽā§āϰ āύāĻžāĻŽ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠|
ii. DML (Data Manipulation Language)
đ āĻāĻĻā§āĻĻā§āĻļā§āϝ: āĻĄā§āĻāĻž āĻāύāϏāĻžāϰā§āĻ, āĻāĻĒāĻĄā§āĻ āĻŦāĻž āĻĄāĻŋāϞāĻŋāĻ āĻāϰāĻžāĨ¤
| āĻāĻŽāĻžāύā§āĻĄ | āĻŦā§āϝāĻžāĻā§āϝāĻž |
|---|---|
| SELECT | āĻĄā§āĻāĻž āϰāĻŋāĻĄ āĻāϰ⧠|
| INSERT | āĻĄā§āĻāĻž āϝā§āĻ āĻāϰ⧠|
| UPDATE | āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĄā§āĻāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠|
| DELETE | āĻĄā§āĻāĻž āĻĄāĻŋāϞāĻŋāĻ āĻāϰ⧠|
đ āĻ āύā§āĻā§ āϏāĻŽāϝāĻŧ
SELECTāĻā§ DQL (Data Query Language) āĻšāĻŋāϏā§āĻŦā§āĻ āĻĻā§āĻāĻž āĻšāϝāĻŧāĨ¤
3. DQL (Data Query Language)
đ āĻāĻĻā§āĻĻā§āĻļā§āϝ: āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĄā§āĻāĻž query āĻāϰāĻž āĻŦāĻž āϰāĻŋāĻĄ āĻāϰāĻžāĨ¤
| āĻāĻŽāĻžāύā§āĻĄ | āĻŦā§āϝāĻžāĻā§āϝāĻž |
|---|---|
| SELECT | āĻĄā§āĻāĻž āĻĒāĻĄāĻŧāĻžāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧ |
â ī¸ āĻā§āĻāύāĻŋāĻā§āϝāĻžāϞāĻŋ SELECT DML āĻāϰ āĻ
āĻāĻļ āĻšāϞā§āĻ āĻ
āύā§āĻ āϏāĻŽāϝāĻŧ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ DQL āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻž āĻšāϝāĻŧāĨ¤
4. DCL (Data Control Language)
đ āĻāĻĻā§āĻĻā§āĻļā§āϝ: āĻĄā§āĻāĻžāĻŦā§āĻāϏā§āϰ access control āĻŦāĻž āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āĻāϝāĻŧāĻž/āύā§āĻāϝāĻŧāĻžāĨ¤
| āĻāĻŽāĻžāύā§āĻĄ | āĻŦā§āϝāĻžāĻā§āϝāĻž |
|---|---|
| GRANT | āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻĻā§āϝāĻŧ |
| REVOKE | āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻŦāĻžāϤāĻŋāϞ āĻāϰ⧠|
5. TCL (Transaction Control Language)
đ āĻāĻĻā§āĻĻā§āĻļā§āϝ: āĻĄā§āĻāĻžāĻŦā§āĻāϏ⧠āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰāĻžāĨ¤
| āĻāĻŽāĻžāύā§āĻĄ | āĻŦā§āϝāĻžāĻā§āϝāĻž |
|---|---|
| COMMIT | āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āϏā§āĻĨāĻžāϝāĻŧā§ āĻāϰ⧠|
| ROLLBACK | āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻŦāĻžāϤāĻŋāϞ āĻāϰ⧠āĻĒā§āϰā§āĻŦāĻžāĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĢāĻŋāϰāĻŋāϝāĻŧā§ āύā§āϝāĻŧ |
| SAVEPOINT | āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĒāϝāĻŧā§āύā§āĻā§ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āϏā§āĻ āĻāϰ⧠|
| SET TRANSACTION | āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻāϏā§āϞā§āĻļāύ āϞā§āĻā§āϞ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰ⧠|
6. CCL (Concurrency Control Language) đ
đ āĻāĻāĻŋ āĻ āύā§āĻ āϏāĻŽāϝāĻŧ āĻāϞā§āĻāύāĻž āĻšāϝāĻŧ, āĻāĻŋāύā§āϤ⧠SQL standard āĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻāĻāĻžāĻŦā§ CCL āύā§āĻāĨ¤ āϤāĻŦā§ āĻāĻāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ āĻŦā§āĻāĻžāύ⧠āĻšāϝāĻŧ:
- LOCK, UNLOCK, āĻŦāĻž Concurrency Handling Techniques
- āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāϝāĻŧ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻ āĻŦāĻž Deadlock/Isolation Level āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖā§āϰ āĻāύā§āϝāĨ¤
â ī¸ āĻāĻāĻŋ āĻ āϧāĻŋāĻāĻžāĻāĻļ āĻĄā§āĻāĻžāĻŦā§āĻāϏ⧠āĻāϞāĻžāĻĻāĻž āĻā§āϝāĻžāĻāĻžāĻāϰāĻŋ āĻšāĻŋāϏā§āĻŦā§ āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧ āύāĻž, āĻāĻŋāύā§āϤ⧠concurrency control mechanism āĻāϰ āĻ āĻāĻļ āĻšāĻŋāϏā§āĻŦā§ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤
â āϏāĻāĻā§āώā§āĻĒā§ āĻŽāύ⧠āϰāĻžāĻāĻžāϰ āĻā§āϰāĻŋāĻ:
| āĻā§āϝāĻžāĻāĻžāĻāϰāĻŋ | āĻāĻžāĻ |
|---|---|
| DDL | Structure define āĻāϰ⧠|
| DML | āĻĄā§āĻāĻž manage āĻāϰ⧠|
| DQL | āĻĄā§āĻāĻž query āĻāϰ⧠|
| DCL | āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰ⧠|
| TCL | āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖ āĻāϰ⧠|
| CCL | concurrency āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ āĻāĻā§āϏā§āϏ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰ⧠(non-standard) |
āĻĒā§āϰāĻļā§āύ 27: constraint āĻāĻŋ āĻ āĻā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻāϞā§āĻāύāĻž āĻāϰā§?
āĻāϤā§āϤāϰ:
â Constraint āĻā§?
Constraint āĻšāϞ⧠āĻĄā§āĻāĻžāĻŦā§āĻāϏā§āϰ āĻāĻāĻāĻŋ āύāĻŋā§āĻŽ āĻŦāĻž āĻŦāĻŋāϧāĻŋāύāĻŋāώā§āϧ (rule) āϝāĻž āĻā§āĻŦāĻŋāϞā§āϰ āĻĄā§āĻāĻžāϰ āĻāĻĒāϰ āĻĒā§āϰā§ā§āĻ āĻāϰāĻž āĻšā§, āϝāĻžāϤ⧠āĻĄā§āĻāĻžāϰ āϏāĻ āĻŋāĻāϤāĻž (accuracy), āύāĻŋāϰā§āĻā§āϞāϤāĻž (integrity) āĻāĻŦāĻ consistency āĻŦāĻāĻžā§ āĻĨāĻžāĻā§āĨ¤
đ āϏāĻšāĻāĻāĻžāĻŦā§:
Constraint āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰ⧠āϝ⧠āĻĄā§āĻāĻžāĻŦā§āĻāϏ⧠āĻā§āϞ āĻŦāĻž āĻ
āĻĒā§āϰā§ā§āĻāύā§ā§ āĻĄā§āĻāĻž āĻĸā§āĻāϤ⧠āύāĻž āĻĒāĻžāϰā§āĨ¤
đ¯ Constraint āĻā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§?
Constraint āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻŽā§āϞ āĻāĻĻā§āĻĻā§āĻļā§āϝ:
- â āĻā§āϞ āĻĄā§āĻāĻž āĻāύāϏāĻžāϰā§āĻ āĻšāĻā§āĻž āĻŦāύā§āϧ āĻāϰāĻž
- â āĻĄā§āĻāĻžāϰ integrity āĻŦāĻāĻžā§ āϰāĻžāĻāĻž
- đ āĻā§āĻŦāĻŋāϞāĻā§āϞā§āϰ āĻŽāϧā§āϝ⧠āϏāĻŽā§āĻĒāϰā§āĻ āĻ āĻŋāĻ āϰāĻžāĻāĻž
- ⥠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āϞāĻāĻŋāĻā§āϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āύāĻž āĻāϰ⧠āĻĄā§āĻāĻžāĻŦā§āĻāϏ āϞā§āĻā§āϞā§āĻ validation āĻāϰāĻž
đ¸ Constraint āĻāϰ āϧāϰāύ āĻ āĻŦā§āϝāĻžāĻā§āϝāĻž
1. PRIMARY KEY
đ āĻĒā§āϰāϤāĻŋāĻāĻŋ row āĻā§ āĻāĻāύāĻŋāĻāĻāĻžāĻŦā§ āĻāĻŋāĻšā§āύāĻŋāϤ āĻāϰā§āĨ¤
āĻŦā§āĻļāĻŋāώā§āĻā§āϝ:
- āĻāĻāύāĻŋāĻ āĻšāϤ⧠āĻšāĻŦā§
- NULL āĻšāϤ⧠āĻĒāĻžāϰāĻŦā§ āύāĻž
āĻāĻĻāĻžāĻšāϰāĻŖ:
id INT PRIMARY KEY
đ āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāϞ⧠āĻāĻāĻāĻŋāĻ PRIMARY KEY āĻĨāĻžāĻā§āĨ¤
2. FOREIGN KEY
đ āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāϞā§āϰ āĻāϞāĻžāĻŽ āĻ āύā§āϝ āĻā§āĻŦāĻŋāϞā§āϰ PRIMARY KEY āĻā§ āϰā§āĻĢāĻžāϰ āĻāϰā§āĨ¤
āĻāĻžāĻ:
- āĻā§āĻŦāĻŋāϞā§āϰ āĻŽāϧā§āϝ⧠relationship āϤā§āϰāĻŋ āĻāϰā§
- invalid reference āĻāĻāĻāĻžā§
āĻāĻĻāĻžāĻšāϰāĻŖ:
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
đ āϝāĻĻāĻŋ users āĻā§āĻŦāĻŋāϞ⧠āĻāĻ id āύāĻž āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠insert āĻšāĻŦā§ āύāĻžāĨ¤
3. UNIQUE
đ āĻāϞāĻžāĻŽā§āϰ āϏāĻŦ āĻā§āϝāĻžāϞ⧠āĻāĻāύāĻŋāĻ āĻšāϤ⧠āĻšāĻŦā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
email VARCHAR(255) UNIQUE
đ Duplicate email āĻĸā§āĻāĻžāύ⧠āϝāĻžāĻŦā§ āύāĻžāĨ¤
4. NOT NULL
đ āĻā§āύ⧠āĻāϞāĻžāĻŽā§ NULL āĻā§āϝāĻžāϞ⧠āϰāĻžāĻāĻž āϝāĻžāĻŦā§ āύāĻžāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
name VARCHAR(100) NOT NULL
đ name āĻ āĻŦāĻļā§āϝāĻ āĻĻāĻŋāϤ⧠āĻšāĻŦā§āĨ¤
5. CHECK
đ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻļāϰā§āϤ āĻĒā§āϰāĻŖ āĻāϰāϞ⧠āϤāĻŦā§āĻ āĻĄā§āĻāĻž āĻāύāϏāĻžāϰā§āĻ/āĻāĻĒāĻĄā§āĻ āĻšāĻŦā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
age INT CHECK (age >= 18)
đ ā§§ā§Ž āĻŦāĻāϰā§āϰ āĻāĻŽ āĻŦā§āϏ āĻšāϞ⧠insert āĻšāĻŦā§ āύāĻžāĨ¤
6. DEFAULT
đ āĻā§āύ⧠āĻā§āϝāĻžāϞ⧠āύāĻž āĻĻāĻŋāϞ⧠āĻĄāĻŋāĻĢāϞā§āĻ āĻā§āϝāĻžāϞ⧠āϏā§āĻ āĻāϰā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
status VARCHAR(20) DEFAULT 'active'
đ status āύāĻž āĻĻāĻŋāϞ⧠auto 'active' āĻšāĻŦā§āĨ¤
đĨ āĻŦāĻžāϏā§āϤāĻŦ āĻāĻĻāĻžāĻšāϰāĻŖ (Real-world scenario)
āϧāϰ⧠āĻāĻāĻāĻŋ orders āĻā§āĻŦāĻŋāϞ:
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
amount DECIMAL(10,2) CHECK (amount > 0),
status VARCHAR(20) DEFAULT 'pending',
FOREIGN KEY (user_id) REFERENCES users(id)
);
đ āĻāĻāĻžāύā§:
-
idâ āĻāĻāύāĻŋāĻ (PRIMARY KEY) -
user_idâ āĻ āĻŦāĻļā§āϝāĻ users āĻā§āĻŦāĻŋāϞ⧠āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§ (FOREIGN KEY) -
amountâ 0 āĻāϰ āĻŦā§āĻļāĻŋ āĻšāϤ⧠āĻšāĻŦā§ (CHECK) -
statusâ āύāĻž āĻĻāĻŋāϞ⧠'pending' āĻšāĻŦā§ (DEFAULT)
⥠Interview Tips (āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻĒā§ā§āύā§āĻ)
Constraint = Data integrity enforcement at DB level
Application validation āĻĨāĻžāĻāϞā§āĻ DB constraint āĻĨāĻžāĻāĻž āĻāϰā§āϰāĻŋ
Foreign key = relationship + data safety
CHECK constraint āϏāĻŦ DB-āϤ⧠fully supported āύāĻž (āϝā§āĻŽāύ āĻāĻŋāĻā§ MySQL version āĻ limitation āĻāĻā§)
â āϏāĻāĻā§āώā§āĻĒā§:
| Constraint | āĻāĻžāĻ |
|---|---|
| PRIMARY KEY | āĻāĻāύāĻŋāĻ āĻāĻāĻĄāĻŋ |
| FOREIGN KEY | āϏāĻŽā§āĻĒāϰā§āĻ āϤā§āϰāĻŋ |
| UNIQUE | āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āϰā§āϧ |
| NOT NULL | āĻĢāĻžāĻāĻāĻž āύāĻž āϰāĻžāĻāĻž |
| CHECK | āĻļāϰā§āϤ āĻāϰā§āĻĒ |
| DEFAULT | āĻĄāĻŋāĻĢāϞā§āĻ āĻŽāĻžāύ āĻĻā§āĻāϝāĻŧāĻž |
āĻĒā§āϰāĻļā§āύ 28: Sql āĻ group_by āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ āĻāĻĻāĻžāĻšāϰāĻŖ āϏāĻš āĻŦā§āϝāĻžāĻā§āϝāĻž āĻāϰā§?
āĻāϤā§āϤāϰ:
SQL-āĻāϰ GROUP BY āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§ āϝāĻāύ āĻāĻŽāϰāĻž āĻāĻāĻ āϧāϰāύā§āϰ āĻĄā§āĻāĻžāĻā§ āĻā§āϰā§āĻĒ āĻāϰ⧠āϤāĻžāϰ āĻāĻĒāϰ aggregate calculation (COUNT, SUM, AVG, MAX, MIN) āĻāϰāϤ⧠āĻāĻžāĻāĨ¤
āĻāĻŽāĻŋ āϏāĻšāĻ āĻāĻžāώāĻžā§ āĻāĻĻāĻžāĻšāϰāĻŖāϏāĻš āĻŦā§āϝāĻžāĻā§āϝāĻž āĻāϰāĻāĻŋ đ
đš GROUP BY āĻā§?
GROUP BY āĻā§āĻŦāĻŋāϞā§āϰ āĻāĻāĻ āĻŽāĻžāύā§āϰ row āĻā§āϞā§āĻā§ āĻāĻāϤā§āϰ (group) āĻāϰā§
āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻāĻŋ group-āĻāϰ āĻāĻĒāϰ aggregate function āĻĒā§āϰā§ā§āĻ āĻāϰā§āĨ¤
đ āĻāĻĻāĻžāĻšāϰāĻŖ āĻā§āĻŦāĻŋāϞ: orders
| id | customer | amount |
|---|---|---|
| 1 | Rahim | 500 |
| 2 | Karim | 700 |
| 3 | Rahim | 300 |
| 4 | Karim | 200 |
| 5 | Hasan | 400 |
1ī¸âŖ Customer āĻ
āύā§āϝāĻžā§ā§ āĻŽā§āĻ āĻ
āϰā§āĻĄāĻžāϰ āĻāϤ?
SELECT customer, SUM(amount) AS total_amount
FROM orders
GROUP BY customer;
đ āĻĢāϞāĻžāĻĢāϞ:
| customer | total_amount |
|---|---|
| Rahim | 800 |
| Karim | 900 |
| Hasan | 400 |
â āĻāĻāĻ customer-āĻāϰ amount āϝā§āĻ āĻšāϝāĻŧā§āĻā§
2ī¸âŖ Customer āĻ
āύā§āϝāĻžā§ā§ āĻā§āĻāĻž order?
SELECT customer, COUNT(*) AS total_orders
FROM orders
GROUP BY customer;
3ī¸âŖ Average amount per customer
SELECT customer, AVG(amount) AS avg_amount
FROM orders
GROUP BY customer;
4ī¸âŖ GROUP BY + WHERE āĻŦā§āϝāĻŦāĻšāĻžāϰ
WHERE â grouping-āĻāϰ āĻāĻā§āĻ filter āĻāϰā§
SELECT customer, SUM(amount) AS total_amount
FROM orders
WHERE amount > 300
GROUP BY customer;
â ā§Šā§Ļā§Ļ āĻāĻžāĻāĻžāϰ āύāĻŋāĻā§āϰ order āĻŦāĻžāĻĻ
5ī¸âŖ GROUP BY + HAVING āĻŦā§āϝāĻŦāĻšāĻžāϰ
HAVING â grouping-āĻāϰ āĻĒāϰ⧠filter āĻāϰā§
SELECT customer, SUM(amount) AS total_amount
FROM orders
GROUP BY customer
HAVING total_amount > 500;
â āϝāĻžāĻĻā§āϰ total 500-āĻāϰ āĻŦā§āĻļāĻŋ
đ WHERE vs HAVING āĻĒāĻžāϰā§āĻĨāĻā§āϝ
| āĻŦāĻŋāώāϝāĻŧ | WHERE | HAVING |
|---|---|---|
| āĻāĻāύ āĻāĻžāĻ āĻāϰ⧠| GROUP BY āĻāϰ āĻāĻā§ | GROUP BY āĻāϰ āĻĒāϰ⧠|
| Aggregate function | â āύāĻž | â āĻšā§āϝāĻžāĻ |
â ī¸ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āύāĻŋā§āĻŽ
-
SELECT-āĻ āϝā§āϏāĻŦ āĻāϞāĻžāĻŽ aggregate āύāĻž, āϏā§āĻā§āϞ⧠āĻ āĻŦāĻļā§āϝāĻGROUP BY-āϤ⧠āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§
â āĻā§āϞ:
SELECT customer, amount FROM orders
GROUP BY customer;
â āĻ āĻŋāĻ:
SELECT customer, SUM(amount)
FROM orders
GROUP BY customer;
đ§ Interview Ready (1 line):
> GROUP BY āĻāĻāĻ āĻŽāĻžāύā§āϰ row āĻā§āϞā§āĻā§ āĻā§āϰā§āĻĒ āĻāϰ⧠aggregate calculation āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§
āĻĒā§āϰāĻļā§āύ 29: Query Execution Order āĻā§? āĻā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§?
āĻāϤā§āϤāϰ:
đ¸ Query Execution Order āĻā§?
Query Execution Order āĻšāϞ⧠SQL query āϰāĻžāύ āĻāϰāĻžāϰ āϏāĻŽā§ āĻĄā§āĻāĻžāĻŦā§āĻāϏ āĻāĻā§āĻāĻŋāύ āĻā§āύ āĻā§āϰāĻŽā§ (Serial) āĻŦāĻŋāĻāĻŋāύā§āύ clause (āϝā§āĻŽāύ SELECT, WHERE, JOIN) execute āĻāϰ⧠āϤāĻžāϰ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϧāĻžāĻĒāĻāĻŋāϤā§āϤāĻŋāĻ āĻĒā§āϰāĻā§āϰāĻŋā§āĻžāĨ¤
đ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻŦāĻŋāώā§:
āĻāĻŽāϰāĻž āϝā§āĻāĻžāĻŦā§ SQL āϞāĻŋāĻāĻŋ, āĻĄā§āĻāĻžāĻŦā§āĻāϏ āϏā§āĻ order-āĻ execute āĻāϰ⧠āύāĻž!
đš SQL Query Execution Order (Actual Order): Remind: (India tomar -> f(form)z(join) āĻā§āĻĨāĻžā§(where), āĻā§āĻšāĻž(GH->group by, having) āϤ⧠sol(select, order by, limit)id āĻāĻžāĻŦā§ āĻĻāĻŋāĻā§āĨ¤ )
FROM
JOIN
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT
đš āϏāĻšāĻāĻāĻžāĻŦā§ āĻŦā§āĻāĻŋ:
āϧāϰ⧠āĻāĻāĻāĻŋ query:
SELECT name, COUNT(*)
FROM users
WHERE status = 'active'
GROUP BY name
HAVING COUNT(*) > 1
ORDER BY name;
đ Execution āĻšāĻŦā§ āĻāĻāĻžāĻŦā§:
1. FROM â users āĻā§āĻŦāĻŋāϞ āϞā§āĻĄ āĻāϰā§
2. WHERE â status = 'active' āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰā§
3. GROUP BY â name āĻ
āύā§āϝāĻžā§ā§ āĻā§āϰā§āĻĒ āĻāϰā§
4. HAVING â COUNT() > 1 āĻā§āϰā§āĻĒ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰā§
5. SELECT â name, COUNT() āύā§ā§
6. ORDER BY â name āĻ
āύā§āϝāĻžā§ā§ āϏāĻžāĻāĻžā§
đ¯ āĻā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ/āĻāĻžāύāĻž āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ?
1. â Query Debugging āϏāĻšāĻ āĻšā§
āĻā§āύ
WHEREāĻ aggregate function āĻāĻžāĻ āĻāϰ⧠āύāĻž â āĻāĻžāϰāĻŖWHEREāĻāĻā§ execute āĻšā§
2. ⥠Performance OptimizationāĻāĻā§ filter (WHERE) āĻāϰāϞ⧠āĻāĻŽ āĻĄā§āĻāĻž āύāĻŋā§ā§ āĻāĻžāĻ āĻšā§ â query fast āĻšā§
3. đĨ āϏāĻ āĻŋāĻ Result āĻĒāĻžāĻā§āĻžHAVINGvsWHEREāĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§ āĻŦā§āĻāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰā§
4. đĄ Interview Trick Question Handle āĻāϰāϤā§āĻ āύā§āĻ āϏāĻŽā§ āĻāĻŋāĻā§āĻā§āϏ āĻāϰā§:
đ "SELECT āĻāĻā§ āϞāĻŋāĻāĻŋ, āĻāĻŋāύā§āϤ⧠execute āĻļā§āώ⧠āĻšā§ āĻā§āύ?"
đ§ āϏāĻāĻā§āώā§āĻĒā§ āĻŽāύ⧠āϰāĻžāĻāĻžāϰ āĻā§āϰāĻŋāĻ:
đ "From â Where â Group â Having â Select â Order â Limit"
â Final Summary:
Query Execution Order = SQL internally āĻā§āĻāĻžāĻŦā§ step-by-step query execute āĻāϰā§
āĻāĻāĻŋ āĻāĻžāύāĻž āĻĨāĻžāĻāϞā§:
- āĻā§āϞ āĻāĻŽ āĻšāĻŦā§
- performance āĻŦāĻžā§āĻŦā§
- complex query āϏāĻšāĻā§ āĻŦā§āĻāϤ⧠āĻĒāĻžāϰāĻŦā§
āĻĒā§āϰāĻļā§āύ 30: SELECT āĻāĻā§ āϞāĻŋāĻāĻŋ, āĻāĻŋāύā§āϤ⧠execute āĻļā§āώ⧠āĻšā§ āĻā§āύ?
āĻāϤā§āϤāϰ:
đ¸ āϏāĻāĻā§āώāĻŋāĻĒā§āϤ āĻāϤā§āϤāϰ (Interview-ready):
āĻāĻŽāϰāĻž SQL query-āϤ⧠SELECT āĻāĻā§ āϞāĻŋāĻāĻŋ āĻāĻžāϰāĻŖ āĻāĻāĻŋ declarative syntax (āĻāĻŋ āĻāĻžāĻ āϤāĻž āĻŦāϞāĻŋ), āĻāĻŋāύā§āϤ⧠āĻĄā§āĻāĻžāĻŦā§āĻāϏ āĻāĻā§āĻāĻŋāύ internally query execute āĻāϰ⧠āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ logical order āĻ
āύā§āϝāĻžā§ā§ â āϝā§āĻāĻžāύ⧠āĻāĻā§ āĻĄā§āĻāĻž āĻā§āĻāĻā§ (FROM, WHERE), āϤāĻžāϰāĻĒāϰ āĻĒā§āϰāϏā§āϏ āĻāϰ⧠(GROUP BY, HAVING), āĻāĻŦāĻ āĻļā§āώ⧠āĻā§ āĻĻā§āĻāĻžāĻŦā§ āϤāĻž āĻ āĻŋāĻ āĻāϰ⧠(SELECT)āĨ¤
đš āϏāĻšāĻāĻāĻžāĻŦā§ āĻŦā§āĻāĻŋ (Real Logic):
āϧāϰā§, āϤā§āĻŽāĻŋ āĻŦāϞāĻā§:
đ âāĻāĻŽāĻžāĻā§ active user āĻā§āϞā§āϰ āύāĻžāĻŽ āĻĻā§āĻāĻžāĻâ
āĻāĻāύ DB āĻā§ āĻāϰāĻŦā§?
1. FROM â āĻāĻā§ āĻā§āĻŦāĻŋāϞ (users) āĻĨā§āĻā§ āĻĄā§āĻāĻž āύā§āĻŦā§
2. WHERE â āϤāĻžāϰāĻĒāϰ active user āĻā§āϞ⧠āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰāĻŦā§
3. GROUP BY / HAVING â āĻĻāϰāĻāĻžāϰ āĻšāϞ⧠āĻā§āϰā§āĻĒāĻŋāĻ āĻāϰāĻŦā§
4. â
SELECTâ āĻļā§āώ⧠āĻ āĻŋāĻ āĻāϰāĻŦā§ āĻā§āύ āĻāϞāĻžāĻŽ (name) āĻĻā§āĻāĻžāĻŦā§
đ āϤāĻžāĻ SELECT logically āĻļā§āώ⧠execute āĻšā§
đš āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ:
SELECT name
FROM users
WHERE status = 'active';
đ Execution flow:
-
FROM usersâ āϏāĻŦ āĻĄā§āĻāĻž āϞā§āĻĄ -
WHERE status = 'active'â āĻļā§āϧ⧠active user āϰāĻžāĻā§ -
SELECT nameâ āĻļā§āϧ⧠name āĻāϞāĻžāĻŽ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§
đĨ āĻŽā§āϞ āĻāĻžāϰāĻŖ (Why SELECT last?):
1. â
Data Filtering āĻāĻā§ āĻĻāϰāĻāĻžāϰ
- āĻāĻā§ decide āĻāϰāϤ⧠āĻšāĻŦā§ āĻā§āύ data āϞāĻžāĻāĻŦā§ (WHERE)
āϤāĻžāϰāĻĒāϰ decide āĻšāĻŦā§ āĻā§ āĻĻā§āĻāĻžāĻŦā§ (SELECT)
2. ⥠Performance OptimizationāϏāĻŦ āĻĄā§āĻāĻž āύāĻž āĻāύ⧠āĻāĻā§ filter āĻāϰāϞ⧠query fast āĻšā§
3. đ§ Logical Processing ModelSQL āĻāĻāĻāĻŋ declarative language
āϤā§āĻŽāĻŋ āĻŦāϞ⧠âāĻāĻŋ āĻāĻžāĻâ, DB āύāĻŋāĻā§ āĻ āĻŋāĻ āĻāϰ⧠âāĻāĻŋāĻāĻžāĻŦā§ āĻāύāĻŦā§â
đ¯ Interview Pro Tip:
đ āϝāĻĻāĻŋ interviewer āĻāĻŋāĻā§āĻā§āϏ āĻāϰā§:
"WHERE āĻ alias āĻā§āύ āĻāĻžāĻ āĻāϰ⧠āύāĻž?"
āĻāϤā§āϤāϰ:
- āĻāĻžāϰāĻŖ
SELECTāĻĒāϰ⧠execute āĻšā§, āϤāĻžāĻ alias āϤāĻāύ⧠define āĻšā§āύāĻŋ
â āϏāĻāĻā§āώā§āĻĒā§:
- āĻāĻŽāϰāĻž
SELECTāĻāĻā§ āϞāĻŋāĻāĻŋ â readability & syntax āĻāϰ āĻāύā§āϝ - āĻāĻŋāύā§āϤ⧠DB execute āĻāϰ⧠āĻļā§āώ⧠â āĻāĻžāϰāĻŖ āĻāĻā§ data filter/process āĻāϰāϤ⧠āĻšā§
āĻĒā§āϰāĻļā§āύ 31: what is TRUNCATE? DELETE āĻāĻŦāĻ TRUNCATE āĻāϰ āĻŽāϧā§āϝā§āĻāĻžāϰ āĻĒāĻžāϰā§āĻĨāĻā§āϝāĻā§āϞ⧠āύāĻŋā§ā§ āĻāϰāĻ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻāĻžāύāϤ⧠āĻāĻžāύ? DROP āĻāĻŽāĻžāύā§āĻĄ āĻāĻŦāĻ TRUNCATE āĻāϰ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻžāύāϤ⧠āĻāĻžāύ?
āĻāϤā§āϤāϰ:
SQL āĻŦāĻž āĻĄā§āĻāĻžāĻŦā§āϏā§āϰ āĻāĻžāώāĻžā§ TRUNCATE āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻāĻŽāĻžāύā§āĻĄ āϝāĻž āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāϞā§āϰ āĻā§āϤāϰā§āϰ āϏāĻŦ āĻĄā§āĻāĻž āĻŦāĻž āϰā§āĻāϰā§āĻĄ āĻāĻāĻŦāĻžāϰ⧠āĻŽā§āĻā§ āĻĢā§āϞā§āĨ¤ āĻāĻāĻŋ āĻŽā§āϞāϤ āĻā§āĻŦāĻŋāϞāĻāĻŋāĻā§ āĻāĻāĻĻāĻŽ āĻāĻžāϞāĻŋ āĻāϰ⧠āĻĻā§ā§, āĻāĻŋāύā§āϤ⧠āĻā§āĻŦāĻŋāϞā§āϰ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ (āĻāϞāĻžāĻŽā§āϰ āύāĻžāĻŽ āĻŦāĻž āĻĄāĻžāĻāĻž āĻāĻžāĻāĻĒ) āĻ āĻŋāĻ āϰāĻžāĻā§āĨ¤
āϏāĻšāĻāĻāĻžāĻŦā§ āĻŦā§āĻāĻžāϰ āĻāύā§āϝ āĻāϰ āĻŽā§āϞ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻā§āϞ⧠āύāĻŋāĻā§ āĻĻā§āĻā§āĻž āĻšāϞā§:
ā§§. āϏāĻŦ āĻĄā§āĻāĻž āĻĄāĻŋāϞāĻŋāĻ: āĻāĻāĻŋ āĻā§āĻŦāĻŋāϞā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏāĻžāϰāĻŋ (row) āĻŽā§āĻā§ āĻĢā§āϞā§āĨ¤ āĻāĻĒāύāĻŋ āĻāĻžāĻāϞ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻā§āύ⧠āϏāĻžāϰāĻŋ (āϝā§āĻŽāύ: WHERE id=1) āĻĄāĻŋāϞāĻŋāĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āύāĻž; āĻāϰāϞ⧠āϏāĻŦ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
⧍. āĻ
āĻā§-āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻ āϰāĻŋāϏā§āĻ: āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻā§āĻŦāĻŋāϞ⧠āĻā§āύ⧠ID āĻāϞāĻžāĻŽ āĻĨāĻžāĻā§ āϝāĻž āĻ
āĻā§āĻŽā§āĻāĻŋāĻ āĻŦāĻžā§ā§ (Auto-increment), āϤāĻŦā§ TRUNCATE āĻāϰāĻžāϰ āĻĒāϰ āϏā§āĻāĻŋ āĻāĻŦāĻžāϰ ā§§ āĻĨā§āĻā§ āĻļā§āϰ⧠āĻšāĻŦā§āĨ¤
ā§Š. āĻĻā§āϰā§āϤ āĻāĻžāĻ āĻāϰā§: āĻāĻāĻŋ DELETE āĻāĻŽāĻžāύā§āĻĄā§āϰ āĻā§ā§ā§ āĻ
āύā§āĻ āĻĻā§āϰā§āϤ āĻāĻžāĻ āĻāϰ⧠āĻāĻžāϰāĻŖ āĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏāĻžāϰāĻŋāϰ āĻāύā§āϝ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āϞāĻ āĻā§āύāĻžāϰā§āĻ āĻāϰ⧠āύāĻžāĨ¤
ā§Ē. āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰāĻž āĻāĻ āĻŋāύ: āϏāĻžāϧāĻžāϰāĻŖ āĻĄāĻŋāĻĢāϞā§āĻ āϏā§āĻāĻŋāĻāϏ⧠TRUNCATE āĻāϰāϞ⧠āϏā§āĻ āĻĄā§āĻāĻž āĻāϰ āϏāĻšāĻā§ āĻĢāĻŋāϰāĻŋā§ā§ āĻāύāĻž (Undo/Rollback) āϝāĻžā§ āύāĻžāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ:
āϧāϰāĻž āϝāĻžāĻ, āĻāĻĒāύāĻžāϰ users āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāϞ āĻāĻā§āĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āύāĻŋāĻā§āϰ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻāĻžāϞāĻžāύ:
TRUNCATE TABLE users;
āϤāĻžāĻšāϞ⧠āĻāĻ āĻā§āĻŦāĻŋāϞā§āϰ āϏāĻŦ āĻāĻāĻāĻžāϰ āĻĄāĻŋāϞāĻŋāĻ āĻšā§ā§ āϝāĻžāĻŦā§ āĻāĻŦāĻ āĻā§āĻŦāĻŋāϞāĻāĻŋ āĻāĻāĻĻāĻŽ āύāϤā§āύ āĻ āĻŦāϏā§āĻĨāĻžāϰ āĻŽāϤ⧠āĻāĻžāϞāĻŋ āĻšā§ā§ āϝāĻžāĻŦā§āĨ¤
TRUNCATE āĻŦāύāĻžāĻŽ DELETE:
-
DELETE: āĻāĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāϰ⧠āϏāĻžāϰāĻŋ āĻŽā§āĻā§ āĻāĻŦāĻ āĻāĻžāĻāϞ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻžāϰāĻŋ āĻŽā§āĻāĻž āϝāĻžā§ (āϝā§āĻŽāύ:
DELETE FROM users WHERE id=5)āĨ¤ āĻāĻāĻŋ āĻ āĻā§-āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻ āϰāĻŋāϏā§āĻ āĻāϰ⧠āύāĻžāĨ¤ - TRUNCATE: āĻĒā§āϰ⧠āĻā§āĻŦāĻŋāϞ āĻāĻāĻŦāĻžāϰ⧠āĻāĻžāϞāĻŋ āĻāϰ⧠āĻĻā§ā§ āĻāĻŦāĻ āĻ āĻā§-āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻ āϰāĻŋāϏā§āĻ āĻāϰ⧠āĻĻā§ā§āĨ¤
DELETE āĻāĻŦāĻ TRUNCATE āĻāϰ āĻŽāϧā§āϝā§āĻāĻžāϰ āĻĒāĻžāϰā§āĻĨāĻā§āϝāĻā§āϞ⧠āύāĻŋā§ā§ āĻāϰāĻ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻāĻžāύāϤ⧠āĻāĻžāύ?
Answer:
DELETE āĻāĻŦāĻ TRUNCATE āĻāϰ āĻŽā§āϞ āĻĒāĻžāϰā§āĻĨāĻā§āϝāĻā§āϞ⧠āύāĻŋāĻā§ āϏāĻšāĻāĻāĻžāĻŦā§ āĻĻā§āĻā§āĻž āĻšāϞā§:
| āĻŦā§āĻļāĻŋāώā§āĻā§āϝ | DELETE | TRUNCATE |
|---|---|---|
| āϧāϰāύ (Type) | āĻāĻāĻŋ āĻāĻāĻāĻŋ DML (Data Manipulation Language) āĻāĻŽāĻžāύā§āĻĄāĨ¤ | āĻāĻāĻŋ āĻāĻāĻāĻŋ DDL (Data Definition Language) āĻāĻŽāĻžāύā§āĻĄāĨ¤ |
| āĻļāϰā§āϤ (Condition) |
WHERE āĻā§āϞāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻŋāĻā§ āϏāĻžāϰāĻŋ (row) āĻŽā§āĻāĻž āϝāĻžā§āĨ¤ |
āĻā§āύ⧠āĻļāϰā§āϤ āĻĻā§āĻā§āĻž āϝāĻžā§ āύāĻž; āĻĒā§āϰ⧠āĻā§āĻŦāĻŋāϞā§āϰ āϏāĻŦ āĻĄā§āĻāĻž āĻāĻāϏāĻžāĻĨā§ āĻŽā§āĻā§ āϝāĻžā§āĨ¤ |
| āĻāϤāĻŋ (Speed) | āĻāĻāĻŋ āϧā§āϰ⧠āĻāĻžāĻ āĻāϰ⧠(āĻāĻžāϰāĻŖ āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏāĻžāϰāĻŋ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻŽā§āĻā§)āĨ¤ | āĻāĻāĻŋ āĻ āύā§āĻ āĻĻā§āϰā§āϤ āĻāĻžāĻ āĻāϰā§āĨ¤ |
| āĻ āĻā§-āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻ | āĻāĻāĻŋ āĻ āĻā§-āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻ (ID) āϰāĻŋāϏā§āĻ āĻāϰ⧠āύāĻžāĨ¤ āĻĒāϰāĻŦāϰā§āϤ⧠āĻĄā§āĻāĻž āĻāĻā§āϰ āϏāĻŋāϰāĻŋā§āĻžāϞ āĻĨā§āĻā§āĻ āĻļā§āϰ⧠āĻšā§āĨ¤ | āĻāĻāĻŋ āĻ āĻā§-āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻ āϰāĻŋāϏā§āĻ āĻāϰ⧠āĻĻā§ā§āĨ¤ āĻĒāϰāĻŦāϰā§āϤ⧠āĻĄā§āĻāĻž ā§§ āĻĨā§āĻā§ āĻļā§āϰ⧠āĻšā§āĨ¤ |
| āϰā§āϞāĻŦā§āϝāĻžāĻ (Undo) | (Undo) āĻāĻāĻŋ āĻā§āϰāĻžāύāĻā§āϝāĻžāĻāĻļāύā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĢāĻŋāϰāĻŋā§ā§ āĻāύāĻž (Rollback āĻāϰāĻž) āϏāĻŽā§āĻāĻŦāĨ¤ | āĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰāĻž āϝāĻžā§ āύāĻž (āĻĄā§āĻāĻžāĻŦā§āϏ āĻā§āĻĻā§ āĻāĻŋāύā§āύ āĻšāϤ⧠āĻĒāĻžāϰā§)āĨ¤ |
| āϞāĻ (Log) | āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏāĻžāϰāĻŋ āĻŽā§āĻāĻžāϰ āĻāύā§āϝ āĻāϞāĻžāĻĻāĻž āϞāĻ āϤā§āϰāĻŋ āĻāϰā§āĨ¤ | āĻļā§āϧ⧠āĻŽā§āĻŽā§āϰāĻŋ āĻĄāĻŋ-āĻ ā§āϝāĻžāϞā§āĻā§āĻļāύ āϞāĻ āĻāϰā§, āϤāĻžāĻ āϞāĻā§āϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻāĻŽāĨ¤ |
āĻāĻāύ āĻā§āύāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ?
- āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻā§āĻŦāĻŋāϞ āĻĨā§āĻā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻā§āύ⧠āĻāĻāĻāĻžāϰ āĻŦāĻž āϤāĻĨā§āϝ āĻŽā§āĻāϤ⧠āĻšā§, āϤāĻŦā§ DELETE āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
- āϝāĻĻāĻŋ āĻā§āύ⧠āĻā§āϏā§āĻ āĻĄā§āĻāĻž āĻŦāĻž āĻā§āĻŽā§āĻĒā§āϰāĻžāϰāĻŋ āĻā§āĻŦāĻŋāϞ āĻĒā§āϰā§āĻāĻž āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻāϰ⧠āύāϤā§āύā§āϰ āĻŽāϤ⧠āĻāϰāϤ⧠āĻāĻžāύ, āϤāĻŦā§ TRUNCATE āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
āĻāĻĒāύāĻŋ āĻāĻŋ DROP āĻāĻŽāĻžāύā§āĻĄ āĻāĻŦāĻ TRUNCATE āĻāϰ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻžāύāϤ⧠āĻāĻžāύ?
Answer:
DROP āĻāĻŦāĻ TRUNCATE āĻāϰ āĻŽā§āϞ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻšāϞā§âāĻāĻāĻāĻŋ āĻĒā§āϰ⧠āĻā§āĻŦāĻŋāϞāĻāĻŋāĻā§āĻ āĻ
āϏā§āϤāĻŋāϤā§āĻŦāĻšā§āύ āĻāϰ⧠āĻĻā§ā§, āĻāϰ āĻ
āύā§āϝāĻāĻŋ āĻļā§āϧ⧠āĻā§āĻŦāĻŋāϞā§āϰ āĻā§āϤāϰā§āϰ āĻĄā§āĻāĻž āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻāϰā§āĨ¤
āύāĻŋāĻā§ āĻāĻĻā§āϰ āĻĒā§āϰāϧāĻžāύ āĻĒāĻžāϰā§āĻĨāĻā§āϝāĻā§āϞ⧠āĻĻā§āĻā§āĻž āĻšāϞā§:
| āĻŦā§āĻļāĻŋāώā§āĻā§āϝ | TRUNCATE | DROP |
|---|---|---|
| āĻāĻžāĻ | āĻā§āĻŦāĻŋāϞā§āϰ āĻā§āϤāϰā§āϰ āϏāĻŦ āĻĄā§āĻāĻž āĻŽā§āĻā§ āĻĢā§āϞā§, āĻāĻŋāύā§āϤ⧠āĻā§āĻŦāĻŋāϞāĻāĻŋ āĻĨā§āĻā§ āϝāĻžā§āĨ¤ | āĻā§āĻŦāĻŋāϞā§āϰ āĻĄā§āĻāĻž āĻāĻŦāĻ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ (āĻāϰāĻŦāĻžā§āĻŋ) āϏāĻŦ āĻŽā§āĻā§ āĻĢā§āϞā§āĨ¤ |
| āĻĢāϞāĻžāĻĢāϞ | āĻā§āĻŦāĻŋāϞāĻāĻŋ āĻāĻžāϞāĻŋ āĻšā§ā§ āϝāĻžā§, āĻāĻŋāύā§āϤ⧠āĻāĻĒāύāĻŋ āĻāĻžāĻāϞ⧠āĻāĻŦāĻžāϰ āύāϤā§āύ āĻĄā§āĻāĻž āĻĸā§āĻāĻžāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤ | āĻĄā§āĻāĻžāĻŦā§āϏ⧠āĻāĻ āĻā§āĻŦāĻŋāϞā§āϰ āĻāϰ āĻā§āύ⧠āύāĻžāĻŽ-āύāĻŋāĻļāĻžāύāĻž āĻĨāĻžāĻā§ āύāĻžāĨ¤ |
| āϏā§āĻĒā§āϏ (Space) | āĻāĻāĻŋ āĻŽā§āĻŽā§āϰāĻŋ āϏā§āĻĒā§āϏ āĻāĻžāϞāĻŋ āĻāϰ⧠āĻĻā§ā§āĨ¤ | āĻāĻāĻŋ āĻŽā§āĻŽā§āϰāĻŋ āĻĨā§āĻā§ āĻā§āĻŦāĻŋāϞā§āϰ āĻĒā§āϰ⧠āĻŽā§āϝāĻžāĻĒ āĻŦāĻž āĻĄā§āĻĢāĻŋāύāĻŋāĻļāύ āĻŽā§āĻā§ āĻĢā§āϞā§āĨ¤ |
| āĻŦā§āϝāĻŦāĻšāĻžāϰ | āϝāĻāύ āĻļā§āϧ⧠āĻĄā§āĻāĻž āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻāϰāϤ⧠āĻāĻžāύ āĻāĻŋāύā§āϤ⧠āĻā§āĻŦāĻŋāϞāĻāĻŋ āĻĒāϰ⧠āĻāĻžāĻā§ āϞāĻžāĻāĻŦā§āĨ¤ | āϝāĻāύ āĻā§āĻŦāĻŋāϞāĻāĻŋāϰ āĻāϰ āĻā§āύ⧠āĻĒā§āϰā§ā§āĻāύ āύā§āĻ āĻāĻŦāĻ āϏā§āĻāĻŋ āĻĄāĻŋāϞāĻŋāĻ āĻāϰ⧠āĻĻāĻŋāϤ⧠āĻāĻžāύāĨ¤ |
āĻāĻāĻāĻŋ āĻŦāĻžāϏā§āϤāĻŦ āĻāĻĻāĻžāĻšāϰāĻŖ:
āϧāϰāĻž āϝāĻžāĻ, āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻŦāĻā§ā§āϰ āĻāϞāĻŽāĻžāϰāĻŋ āĻāĻā§āĨ¤
- TRUNCATE āĻāϰāĻž āĻŽāĻžāύ⧠āĻšāϞā§: āĻāϞāĻŽāĻžāϰāĻŋāϰ āϏāĻŦ āĻŦāĻ āĻŦā§āϰ āĻāϰ⧠āĻĢā§āϞ⧠āĻĻā§āĻā§āĻžāĨ¤ āĻāϤ⧠āĻāϞāĻŽāĻžāϰāĻŋāĻāĻŋ āĻāĻžāϞāĻŋ āĻšā§ā§ āĻā§āϞ, āĻāĻŋāύā§āϤ⧠āĻāϞāĻŽāĻžāϰāĻŋāĻāĻŋ āĻāĻĒāύāĻžāϰ āĻāϰā§āĻ āĻĨāĻžāĻāϞ āĻāĻŦāĻ āĻāĻĒāύāĻŋ āĻāĻŦāĻžāϰ āύāϤā§āύ āĻŦāĻ āϰāĻžāĻāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤
- DROP āĻāϰāĻž āĻŽāĻžāύ⧠āĻšāϞā§: āĻāϞāĻŽāĻžāϰāĻŋāĻāĻŋāϏāĻš āĻā§āϤāϰā§āϰ āϏāĻŦ āĻŦāĻ āĻā§āĻā§ āĻāϰ āĻĨā§āĻā§ āĻŦā§āϰ āĻāϰ⧠āĻĻā§āĻā§āĻžāĨ¤ āĻāĻāύ āĻāĻĒāύāĻžāϰ āĻāϰ⧠āĻāϰ āĻā§āύ⧠āĻāϞāĻŽāĻžāϰāĻŋāĻ āύā§āĻāĨ¤
āĻĒā§āϰāĻļā§āύ 31. REST principles āĻāϰ best practices āĻā§?
āĻāϤā§āϤāϰ:
đš REST Principles (āĻŽā§āϞ āύā§āϤāĻŋ)
REST = Representational State Transfer
Roy Fielding ā§ŦāĻāĻž principle define āĻāϰā§āĻāĻŋāϞā§āύ:
1. ClientâServer Architecture
Client (Frontend / App) āĻāϰ Server (Backend / API) āĻāϞāĻžāĻĻāĻž āĻĨāĻžāĻāĻŦā§āĨ¤
đ Client āĻļā§āϧ⧠request āĻāϰāĻŦā§
đ Server āĻļā§āϧ⧠data / response āĻĻā§āĻŦā§
āϞāĻžāĻ:
- Frontend āĻāϞāĻžāĻĻāĻž āĻāϰ⧠change āĻāϰāĻž āϝāĻžāĻŦā§
- Backend āĻāϞāĻžāĻĻāĻž āĻāϰ⧠scale āĻāϰāĻž āϝāĻžāĻŦā§
2. Stateless
āĻĒā§āϰāϤāĻŋāĻāĻž request āĻāϞāĻžāĻĻāĻž, server āĻā§āύ⧠user state āĻŽāύ⧠āϰāĻžāĻāĻŦā§ āύāĻžāĨ¤
āĻŽāĻžāύā§:
GET /api/profile
Authorization: Bearer token
Server āĻāĻā§āϰ request āĻāĻŋāĻā§āĻ āĻŽāύ⧠āϰāĻžāĻā§ āύāĻž, āϏāĻŦ āϤāĻĨā§āϝ request āĻāϰ āĻŽāϧā§āϝā§āĻ āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§āĨ¤
āϞāĻžāĻ:
- āϏāĻšāĻ scaling
- Bug āĻāĻŽ
- Load balancing āϏāĻšāĻ
3. Cacheable
Response cache āĻāϰāĻž āϝāĻžāĻŦā§āĨ¤
Server āĻŦāϞāĻŦā§:
Cache-Control: max-age=3600
Client/browser cache āĻāϰ⧠āϰāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
āϞāĻžāĻ:
- Speed āĻŦā§āĻļāĻŋ
- Server load āĻāĻŽ
4. Uniform Interface
āĻāĻāĻ āϰāĻāĻŽ structure āϏāĻŦ āĻāĻžā§āĻāĻžā§āĨ¤
āϝā§āĻŽāύ:
GET /users
GET /users/10
POST /users
PUT /users/10
DELETE /users/10
āϏāĻŦ resource āĻāϰ āĻāύā§āϝ āĻāĻāĻ styleāĨ¤
5. Layered System
Client āĻāĻžāύāĻŦā§ āύāĻž āϤāĻžāϰ request āϏāϰāĻžāϏāϰāĻŋ server āĻ āĻā§āĻā§ āύāĻžāĻāĻŋ:
- Load balancer
- Proxy
- Gateway
āĻŽāĻžāĻāĻāĻžāύ⧠āĻā§āĻāĻž layer āĻāĻā§, client āĻāϰ āĻŽāĻžāĻĨāĻžāĻŦā§āϝāĻĨāĻž āύāĻžāĨ¤
6. Code on Demand (Optional)
Server āĻāĻžāĻāϞ⧠client āĻā§ code āĻĒāĻžāĻ āĻžāϤ⧠āĻĒāĻžāϰ⧠(JS āĻāϤā§āϝāĻžāĻĻāĻŋ)āĨ¤
āĻāĻāĻāĻž āĻā§āĻŦ āĻāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšā§āĨ¤

Top comments (0)