course
क्या आपने गौर किया है कि डेटाबेस से जुड़ी लगभग हर जॉब डिस्क्रिप्शन में MySQL की मांग होती है? इसकी एक अच्छी वजह है — MySQL आपकी पसंदीदा सोशल मीडिया प्लेटफॉर्म से लेकर रोज़ाना इस्तेमाल होने वाले ऐप्स तक, लगभग हर चीज़ को पावर देता है।
मैंने यह गाइड MySQL इंटरव्यू प्रश्नों से निपटने में आपकी मदद के लिए तैयार किया है। इसमें मैं उन मूल बातों से लेकर उन्नत कॉन्सेप्ट तक कवर करूंगा, जो जूनियर डेवलपर्स से लेकर सीनियर रोल्स तक के लिए ज़रूरी हैं। साथ ही, मैं कुछ टिप्स भी साझा करूंगा ताकि आप अपने अगले डेटा-सम्बंधित इंटरव्यू में आत्मविश्वासी नज़र आएं।
MySQL क्या है?
MySQL एक ओपन-सोर्स RDBMS (रिलेशनल डेटाबेस मैनेजमेंट सिस्टम) है जो SQL पर आधारित है और डेटा को संरचित टेबलों में व्यवस्थित करता है। इसे Oracle Corporation ने विकसित किया है।
यह 2024 में सबसे लोकप्रिय DBMS के रूप में रैंक किया गया था। हालांकि, 2025 के Stack Overflow Developer सर्वे में पेशेवर डेवलपर्स के बीच PostgreSQL को सबसे अधिक उपयोग होने वाला डेटाबेस बताया गया, जिसने पहली बार MySQL को पीछे छोड़ा।
गलत मत समझिए: MySQL अब भी बेहद लोकप्रिय है — 2025 में डेवलपर्स के बीच 40.5% उपयोग तक पहुंचा — और अब भी असंख्य वेब एप्लीकेशंस, कंटेंट मैनेजमेंट सिस्टम, और एंटरप्राइज टूल्स को पावर देता है। और खासकर अगर आप वेब एप्लीकेशंस या LAMP स्टैक के साथ काम कर रहे हैं, तो MySQL एक शीर्ष-स्तरीय स्किल है।

2024 में, MySQL दुनिया का सबसे लोकप्रिय ओपन-सोर्स DBMS था, जिसका रैंकिंग स्कोर 1061 था। स्रोत: Statista.
बेसिक MySQL इंटरव्यू प्रश्न
प्रारंभिक इंटरव्यू चरण में, इंटरव्यूअर आपके बुनियादी डेटाबेस और MySQL कॉन्सेप्ट्स की समझ का आकलन करने के लिए मूलभूत प्रश्न पूछ सकता है।
1. डेटाबेस क्या है, और यह DBMS से कैसे अलग है?
डेटाबेस एक स्टोरेज कंटेनर है जिसमें डेटा रखा जाता है, जिसे हम एक्सेस, संशोधित और विश्लेषित कर सकते हैं। उदाहरण के लिए, सोशल मीडिया प्लेटफॉर्म हमारे पोस्ट को किसने पसंद किया, इसका डेटा डेटाबेस में स्टोर करते हैं।
DBMS (Database Management System) एक सॉफ्टवेयर है जो हमें उस डेटा के साथ इंटरैक्ट करने और उसे मैनेज करने देता है—जैसे उपयोगकर्ता बनाना और उनकी एक्सेस प्रबंधित करना। MySQL सबसे लोकप्रिय DBMS विकल्पों में से एक है। अन्य उदाहरणों में PostgreSQL, MongoDB, और Microsoft SQL Server शामिल हैं।
2. MySQL अन्य रिलेशनल डेटाबेस मैनेजमेंट सिस्टम्स से कैसे अलग है?
MySQL एक ओपन-सोर्स रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है जो डेटा को प्रबंधित करने के लिए SQL का उपयोग करता है। यह उपयोग में सरलता, स्पीड, और वेब-आधारित एप्लीकेशंस के साथ अनुकूलता के लिए जाना जाता है।
यहां बताया गया है कि MySQL अन्य RDBMSs से कैसे अलग है:
- सादगी और परफॉर्मेंस: MySQL को अक्सर इसकी सादगी और ऑप्टिमाइज़्ड परफॉर्मेंस के लिए सराहा जाता है, जो वेब डेवलपर्स और स्टार्टअप्स के लिए इसे पसंदीदा विकल्प बनाता है।
- एडवांस्ड फीचर्स: जबकि MySQL उपयोग में आसानी में उत्कृष्ट है, यह कुछ उन्नत सुविधाओं की कमी कर सकता है जो अन्य RDBMS जैसे PostgreSQL में मिलती हैं, जैसे ACID ट्रांज़ैक्शंस का व्यापक समर्थन, उन्नत इंडेक्सिंग, और डेटा टाइप्स का व्यापक सेट।
- स्टोरेज इंजन: MySQL आपको टेबल्स के लिए अलग-अलग स्टोरेज इंजन (जैसे InnoDB, MyISAM) चुनने देता है, जो विशेष उपयोग मामलों के लिए लचीलापन देता है।
MySQL उन स्थितियों के लिए आदर्श है जहां स्पीड और स्केलेबिलिटी की ज़रूरत होती है, लेकिन अधिक जटिल या एंटरप्राइज-ग्रेड सुविधाओं के लिए PostgreSQL बेहतर विकल्प हो सकता है।
3. MySQL में उपलब्ध प्रमुख डेटा टाइप्स कौन-से हैं?
MySQL विभिन्न डेटा टाइप्स को सपोर्ट करता है, जो इस प्रकार वर्गीकृत हैं:
-
Numeric:
INT,DECIMAL,FLOAT,DOUBLE, आदि -
String:
CHAR,VARCHAR,TEXT,BLOB. -
Date/time:
DATE,DATETIME,TIMESTAMP,TIME. -
JSON: JSON ऑब्जेक्ट्स स्टोर करने के लिए।
4. INT और DECIMAL डेटा टाइप्स में क्या अंतर है?
INT पूर्णांक (डेसिमल पॉइंट के बिना) स्टोर करता है। जब भिन्नांश की ज़रूरत नहीं हो, तब इसका उपयोग किया जा सकता है। इसके विपरीत, DECIMAL वित्तीय मानों को स्टोर कर सकता है और डेसिमल्स के साथ सटीक गणनाओं के लिए उपयुक्त है।
5. MySQL में DATE और DATETIME में क्या अंतर है?
DATE MySQL में वर्ष, माह और दिन के फॉर्मेट में तारीख स्टोर करता है:
YYYY-MM-DD
जबकि DATETIME तारीख के साथ समय भी स्टोर करता है, और यह इस प्रकार दिखता है:
YYYY-MM-DD HH:MM:SS
6. फॉरेन की क्या है, और आप इसे डेटाबेस में कैसे उपयोग करेंगे?
फॉरेन की एक टेबल में वह फील्ड है जो किसी दूसरी टेबल की प्राइमरी की से जुड़ती है।
उदाहरण के लिए, एक customers टेबल में जो ग्राहक की जानकारी स्टोर करती है, प्रत्येक ग्राहक का एक यूनिक customer_id होता है—एक अन्य टेबल transactions (जो खरीद रिकॉर्ड स्टोर करती है) में, हम customer_id को फॉरेन की के रूप में उपयोग करते हैं। ट्रांज़ैक्शंस टेबल में customer_id प्रत्येक खरीद को customers टेबल के एक विशिष्ट ग्राहक से जोड़ता है।
SQL में यह इस तरह दिखता है:
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
CREATE TABLE transactions (
transaction_id INT PRIMARY KEY,
customer_id INT,
amount DECIMAL(10,2),
date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
7. INNER JOIN, LEFT JOIN, RIGHT JOIN, और FULL JOIN में क्या अंतर है?
Joins सम्बंधित कॉलम के आधार पर दो या अधिक टेबल्स की पंक्तियों को जोड़ते हैं। इनके अंतर इस प्रकार हैं:
-
INNER JOIN: वहीं पंक्तियाँ लौटाता है जहां दोनों टेबल्स में मैच हो।
-
LEFT JOIN: बाएँ टेबल की सभी पंक्तियाँ और दाएँ टेबल से मैचिंग पंक्तियाँ लौटाता है। अगर मैच नहीं है, तो दाएँ टेबल के कॉलम्स के लिए
NULLलौटता है। -
RIGHT JOIN:
LEFT JOINजैसा ही, लेकिन दाएँ टेबल की सभी पंक्तियाँ और बाएँ से मैचिंग पंक्तियाँ लौटाता है। -
FULL JOIN:
LEFT JOINऔरRIGHT JOINके परिणामों को मिलाकर दोनों टेबल्स की अनमैच्ड पंक्तियाँ भी शामिल करता है। नोट: MySQL मूल रूप सेFULL JOINसिंटैक्स को सपोर्ट नहीं करता। समान परिणाम पाने के लिएLEFT JOINऔरRIGHT JOINकेUNIONका उपयोग करें।
8. MySQL में DELETE, TRUNCATE, और DROP में क्या अंतर है?
DELETE, TRUNCATE, और DROP जैसे कमांड सुनने में एक जैसे लगते हैं, लेकिन इनका व्यवहार अलग होता है:
DELETE: शर्त के आधार पर टेबल से पंक्तियाँ हटाता है। यदि ट्रांज़ैक्शन के अंदर हो, तो रोल बैक किया जा सकता है। उदाहरण:
DELETE FROM employees WHERE department_id = 5;
TRUNCATE: टेबल की सभी पंक्तियाँ हटाता है, लेकिन टेबल स्ट्रक्चर बना रहता है। यह DELETE से तेज है और रोल बैक नहीं किया जा सकता। उदाहरण:
TRUNCATE TABLE employees;
DROP: टेबल के स्ट्रक्चर और डेटा को पूरी तरह हटाता है, साथ ही इंडेक्स जैसी निर्भरताएँ भी हट जाती हैं। उदाहरण:
DROP TABLE employees;
9. आप MySQL में टेबल कैसे बनाते और संशोधित करते हैं? उदाहरण दें।
टेबल बनाने के लिए आप CREATE TABLE स्टेटमेंट का उपयोग कर सकते हैं, और संशोधन के लिए आमतौर पर ALTER TABLE का। यहां कुछ उदाहरण हैं:
टेबल बनाएं:
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));
कॉलम जोड़ने के लिए संशोधित करें:
ALTER TABLE employees ADD COLUMN salary DECIMAL(10, 2);
10. SQL में टेम्परेरी टेबल क्या होती है?
टेम्परेरी टेबल केवल वर्तमान डेटाबेस सेशन के दौरान मौजूद रहती है। सेशन बंद होते ही टेबल डिलीट हो जाती है। इस प्रकार की टेबल अस्थायी रूप से मध्यवर्ती परिणामों को स्टोर कर सकती है। इसे टेस्टिंग, फ़िल्टरिंग, या स्थायी टेबल में डालने से पहले डेटा तैयार करने के लिए उपयोग किया जा सकता है।
यहां एक उदाहरण है:
CREATE TEMPORARY TABLE temp_employees (
id INT,
name VARCHAR(50)
);
INSERT INTO temp_employees VALUES (1, 'John Doe');
SELECT * FROM temp_employees;
11. MySQL में सबक्वेरी क्या होती है? उदाहरण सहित समझाइए।
सबक्वेरी (जिसे नेस्टेड क्वेरी भी कहते हैं) किसी दूसरी क्वेरी के अंदर लिखी जाती है। यह जटिल डेटाबेस ऑपरेशंस को अधिक प्रबंधनीय चरणों में तोड़ देती है। उदाहरण के लिए, आप औसत वेतन से अधिक कमाने वाले कर्मचारियों को ढूंढने के लिए सबक्वेरी बना सकते हैं:
SELECT first_name, last_name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);
आइए इसे समझते हैं:
-
भीतरी क्वेरी
SELECT AVG(salary) FROM employeesपहले औसत वेतन निकालती है। -
बाहरी क्वेरी फिर इस औसत का उपयोग करके ऐसे कर्मचारियों को ढूंढती है जो इससे अधिक कमाते हैं।
12. MySQL में किसी टेबल में डेटा जोड़ने के लिए आप INSERT स्टेटमेंट कैसे उपयोग करेंगे? क्या इसके लिए कुछ सर्वोत्तम अभ्यास हैं?
हम INSERT स्टेटमेंट का उपयोग टेबल में डेटा जोड़ने के लिए कर सकते हैं। बेसिक सिंटैक्स है:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
INSERT स्टेटमेंट इस्तेमाल करते समय इन सर्वोत्तम अभ्यासों का पालन करें
-
कॉलम्स को स्पष्ट रूप से लिस्ट करें। इससे कोड स्पष्ट रहता है और बाद में टेबल स्ट्रक्चर बदलने पर त्रुटियाँ कम होती हैं।
-
AUTO_INCREMENTकॉलम्स जैसे IDs कोINSERTमें स्किप करें। MySQL इन्हें ऑटोमैटिक संभालता है ताकि डुप्लिकेट IDs न बनें। -
स्ट्रिंग कोट्स का उपयोग सुसंगत रखें। मैं व्यक्तिगत रूप से सिंगल कोट्स पसंद करता/करती हूँ, लेकिन दोनों काम करते हैं।
-
यदि आप कई पंक्तियाँ जोड़ रहे हैं, तो बेहतर परफॉर्मेंस के लिए एक ही स्टेटमेंट में करें।
13. MySQL में AUTO_INCREMENT ऐट्रिब्यूट का क्या महत्व है?
MySQL में AUTO_INCREMENT ऐट्रिब्यूट किसी कॉलम के लिए यूनिक, क्रमिक नंबर जनरेट करता है, आमतौर पर टेबल की प्राइमरी की के रूप में।
यहाँ AUTO_INCREMENT कॉलम के साथ टेबल बनाने का उदाहरण है:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
और इसमें पंक्तियाँ डालने का तरीका:
INSERT INTO employees (name, department) VALUES ('John Doe', 'Sales');
INSERT INTO employees (name, department) VALUES ('Jane Smith', 'Marketing');
14. MySQL में व्यू (View) क्या है?
व्यू एक सेव्ड क्वेरी होती है जो वर्चुअल टेबल की तरह काम करती है। इसके जरिए हम किसी जटिल क्वेरी को नाम देकर सेव कर सकते हैं और भविष्य की क्वेरियों में टेबल की तरह उपयोग कर सकते हैं। इस तरह आपको हर बार पूरी क्वेरी फिर से टाइप नहीं करनी पड़ती।
उदाहरण के लिए, कर्मचारियों के विवरण को उनके विभाग नामों के साथ सरलता से क्वेरी करने के लिए आप एक व्यू बना सकते हैं:
CREATE VIEW employee_details AS
SELECT
e.id,
e.name,
d.department_name,
e.salary
FROM
employees e
JOIN
departments d ON e.department_id = d.department_id;
अब आप employee_details व्यू को टेबल की तरह क्वेरी कर सकते हैं:
SELECT * FROM employee_details;
हालांकि, हम व्यूज़ का उपयोग डेटा को इन्सर्ट और अपडेट करने के लिए नहीं कर सकते। अधिकांश व्यूज़ रीड-ओनली होते हैं और यूज़र्स की सीधे डेटाबेस तक पहुँच को सीमित करते हैं, जिससे डेटा सुरक्षा बढ़ती है। कभी-कभी व्यूज़ क्वेरियों को धीमा भी कर सकते हैं, क्योंकि हर बार एक्सेस होने पर वे अंतर्निहित क्वेरी चलाते हैं।
इंटरमीडिएट MySQL इंटरव्यू प्रश्न
इस सेक्शन में हम इंटरमीडिएट-स्तर के टॉपिक्स कवर करेंगे। ये प्रश्न मुख्यतः MySQL के डेटा टाइप्स और स्ट्रक्चर के आपके ज्ञान की जाँच के लिए पूछे जाते हैं।
15. सिस्टम-वर्ज़न्ड टेबल्स क्या होती हैं, और वे कैसे काम करती हैं?
सिस्टम-वर्ज़न्ड टेबल्स किसी टेबल में किए गए बदलावों का पूरा इतिहास बनाए रखती हैं। चूंकि वे प्रत्येक पंक्ति के पिछले वर्ज़न सुरक्षित रखती हैं, हम उनका उपयोग ऑडिटिंग और डेटा रिकवरी के लिए कर सकते हैं।
ये दो अतिरिक्त कॉलम — StartTime और EndTime — जोड़कर काम करती हैं, जो रिकॉर्ड करती हैं कि प्रत्येक पंक्ति कब वैध है। जब हम डेटा इन्सर्ट, अपडेट या डिलीट करते हैं, तो ये टाइमस्टैम्प अपडेट होते हैं:
-
Insert: नई पंक्ति जोड़ी जाती है, जिसमें
StartTimeवर्तमान टाइमस्टैम्प पर सेट होता है औरEndTime9999-12-31 23:59:59— MySQL का अधिकतमDATETIMEमान — जो 'यह पंक्ति वर्तमान में सक्रिय है' दर्शाने के लिए एक सेंटिनल की तरह उपयोग होता है। -
Update: मूल पंक्ति के
EndTimeको वर्तमान टाइमस्टैम्प पर अपडेट कर दिया जाता है ताकि वह अब वैध न रहे। फिर अपडेटेड डेटा के साथ नई पंक्ति बनाई जाती है, जिसमेंStartTimeवर्तमान टाइमस्टैम्प होता है औरEndTime"हमेशा के लिए"। -
Delete: मौजूदा पंक्ति के
EndTimeको वर्तमान टाइमस्टैम्प पर अपडेट कर दिया जाता है, जो दर्शाता है कि पंक्ति अब वैध नहीं है।
SQL के FOR SYSTEM_TIME क्लॉज़ का उपयोग करके, आप टेबल को किसी विशिष्ट समय बिंदु पर या समय-सीमा के भीतर उसकी स्थिति देखने के लिए क्वेरी कर सकते हैं। उदाहरण के लिए:
-
FOR SYSTEM_TIME AS OF '2024-01-01': 1 जनवरी, 2024 को टेबल की स्थिति प्राप्त करता है। -
FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31': इस तारीख़ सीमा के भीतर वैध सभी पंक्तियाँ दिखाता है।
16. MySQL ट्रांज़ैक्शंस क्या हैं, और आप उनका उपयोग कैसे करते हैं?
ट्रांज़ैक्शंस ऑपरेशंस का ऐसा सेट है जो एक एकल यूनिट के रूप में निष्पादित होता है। ये डेटा अखंडता सुनिश्चित करते हैं, ताकि या तो सभी ऑपरेशंस सफल हों या सभी विफल।
यहाँ उनके उपयोग का उदाहरण है:
START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;
COMMIT; -- बदलावों को स्थायी रूप से सहेजें
-- या
ROLLBACK; -- बदलावों को पलटें
17. MySQL में डिफॉल्ट कंस्ट्रेंट क्या होता है? आप किसी कॉलम के लिए डिफॉल्ट मान कैसे सेट करते हैं?
MySQL में डिफॉल्ट कंस्ट्रेंट किसी कॉलम को डिफॉल्ट मान असाइन करता है जब INSERT ऑपरेशन के दौरान कोई स्पष्ट मान प्रदान नहीं किया जाता। इससे कॉलम तब भी वैध रहता है जब उपयोगकर्ता उसे डेटा एंट्री के दौरान छोड़ दे।
डिफॉल्ट मान के साथ टेबल इस तरह बनाते हैं:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
status VARCHAR(10) DEFAULT 'active'
);
इसके बाद, आप status बताए बिना भी पंक्ति जोड़ सकते हैं:
INSERT INTO employees (name) VALUES ('John Doe');
यह तरीका महत्वपूर्ण कॉलम्स में NULL या अवैध डेटा की संभावना कम करता है और डिफॉल्ट मामलों को अलग से संभालने की जरूरत घटाकर क्वेरियों को सरल बनाता है।
|
Field |
Type |
Null |
Key |
Default |
Extra |
|
id |
INT |
NO |
PRI |
NULL |
AUTO_INCREMENT |
|
name |
VARCHAR(50) |
YES |
NULL |
||
|
status |
VARCHAR(10) |
YES |
active |
यह कमांड उपयोगी है क्योंकि:
- यह डेवलपर्स को क्वेरी लिखने से पहले टेबल स्कीमा समझने में मदद करता है।
- अनजान डेटाबेस के साथ काम करते समय यह डिबगिंग में सहायक होता है।
- यह तेज़ी से कंस्ट्रेंट्स की पहचान करता है, जैसे प्राइमरी की या डिफॉल्ट्स।
18. MySQL में CHAR और VARCHAR में क्या अंतर है?
दोनों स्ट्रिंग डेटा स्टोर करते हैं, लेकिन स्टोरेज को अलग तरह से संभालते हैं:
-
CHAR(n)हमेशा ठीकnअक्षर स्टोर करता है; यदि मान छोटा है तो स्पेस से पैड करता है। यह फिक्स्ड-लेंथ होता है, जिससे उन कॉलम्स के लिए थोड़ा तेज़ होता है जहां सभी मान समान लंबाई के हों, जैसे कंट्री कोड्स या स्टेटस फ्लैग्स। -
VARCHAR(n)केवल दर्ज किए गए वास्तविक अक्षर स्टोर करता है, अधिकतमnतक। यह चर-लंबाई डेटा के लिए कम स्टोरेज लेता है, लेकिन लंबाई ट्रैक करने के लिए थोड़ा ओवरहेड होता है।
CREATE TABLE example (
country_code CHAR(2), -- Always 2 chars, e.g. 'US', 'UK'
email VARCHAR(255) -- Variable length up to 255 chars
);
सामान्य नियम: फिक्स्ड-लंबाई मानों के लिए CHAR का उपयोग करें, बाकी के लिए VARCHAR।
19. आप टेक्स्ट मैनेज करने के लिए SQL में स्ट्रिंग फंक्शंस कैसे उपयोग करेंगे?
SQL में अलग-अलग स्ट्रिंग फंक्शंस नामों और अन्य टेक्स्ट डेटा के साथ काम करते हैं। उदाहरण के लिए:
-
LENGTH()फंक्शन किसी नाम में अक्षरों की संख्या दिखाता है। -
UPPER()औरLOWER()फंक्शंस टेक्स्ट को पूरी तरह अपरकेस या लोअरकेस में बदलते हैं। -
CONCAT()फंक्शन कॉलम में पहला और अंतिम नाम जोड़ता है। -
SUBSTRING()टेक्स्ट के विशिष्ट हिस्से निकालता है। उदाहरण के लिए, हम जन्मतिथि से माह अलग करने के लिए इसका उपयोग कर सकते हैं।
यहाँ एक उदाहरण क्वेरी है:
SELECT
UPPER(first_name) AS upper_name,
CONCAT(first_name, ' ', last_name) AS full_name,
SUBSTRING(birthdate, 6, 2) AS birth_month,
TRIM(last_name) AS trimmed_last_name,
REPLACE(first_name, 'a', '@') AS replaced_name
FROM employees;
यह क्वेरी:
-
नामों को अपरकेस में बदलती है।
-
पहला और अंतिम नाम जोड़कर पूरा नाम बनाती है।
-
birthdateकॉलम से जन्म माह निकालती है। -
अंतिम नामों से स्पेस ट्रिम करती है।
-
पहले नाम में सभी "a" को "@" से बदलती है।
20. आप SQL में किसी विशिष्ट पंक्ति को कैसे अपडेट करेंगे?
आप UPDATE स्टेटमेंट और WHERE क्लॉज़ का उपयोग करके उस रिकॉर्ड की पहचान कर सकते हैं जिसे आप बदलना चाहते हैं।
उदाहरण के लिए, यदि आप 2010 की फिल्म “Inception” की शैली को “Sci-fi” में अपडेट करना चाहते हैं, तो आप इस क्वेरी का उपयोग कर सकते हैं:
UPDATE movies
SET genre = 'Sci-Fi'
WHERE movie_title = 'Inception' AND year = 2010;
यहाँ, UPDATE movies उस टेबल को बताता है जिसे हम अपडेट करना चाहते हैं, और WHERE क्लॉज़ उस पंक्ति को लक्षित करता है जहां शीर्षक “Inception” है और वर्ष “2010” है।
एडवांस्ड MySQL इंटरव्यू प्रश्न
एडवांस्ड प्रश्न आपकी जटिल MySQL परिदृश्यों को संभालने की क्षमता की जाँच करते हैं और इंटरव्यूअर को आपके निर्णय लेने की क्षमता का अंदाज़ा देते हैं।
21. MySQL में ट्रिगर क्या है? आप इसे कैसे इम्प्लिमेंट करेंगे?
MySQL में, ट्रिगर एक क्रियाओं का सेट होता है जो किसी डेटाबेस इवेंट के होने पर चलता है। ट्रिगर्स को INSERT, UPDATE, या DELETE जैसे इवेंट्स से पहले या बाद में एक्जीक्यूट होने के लिए कॉन्फ़िगर किया जा सकता है।
उदाहरण के लिए, मान लीजिए एक orders टेबल है जहाँ नए ऑर्डर जोड़े जाते हैं। हम एक ट्रिगर बना सकते हैं जो हर नए ऑर्डर को order_history टेबल में लॉग करे:
CREATE TRIGGER after_order_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
INSERT INTO order_history (order_id, action, timestamp)
VALUES (NEW.order_id, 'inserted', NOW());
END;
ट्रिगर चलने के बाद, order_history टेबल अपने आप अपडेट हो जाती है:
|
history_id |
order_id |
action |
timestamp |
|
1 |
1 |
inserted |
2024-12-24 10:00:00 |
|
2 |
2 |
inserted |
2024-12-24 11:00:00 |
22. इंडेक्स जोड़ने से SQL क्वेरियाँ तेज़ क्यों हो जाती हैं?
अगर कोई इंडेक्स नहीं है, तो डेटाबेस को किसी विशिष्ट एंट्री को ढूंढने के लिए हर पंक्ति स्कैन करनी पड़ेगी। इंडेक्स एक विषय-सूची की तरह काम करता है, जो डेटाबेस को सम्बंधित पंक्तियों तक तेज़ी से पहुँचने देता है। इसलिए, इंडेक्स जोड़ने से सर्च समय कम हो जाता है और क्वेरियाँ तेज़ चलती हैं।
इंडेक्स आमतौर पर B-tree या हैश टेबल जैसी डेटा स्ट्रक्चर्स का उपयोग करके इम्प्लिमेंट होते हैं, जो सर्च, लुकअप और रेंज स्कैन को कुशल बनाते हैं।
इंडेक्स बनाने का उदाहरण:
-- बिना इंडेक्स के:
SELECT * FROM employees WHERE last_name = 'Smith';
-- last_name कॉलम पर इंडेक्स जोड़ना:
CREATE INDEX idx_last_name ON employees(last_name);
-- इंडेक्स के साथ, डेटाबेस last_name कॉलम में 'Smith' वाली पंक्तियाँ जल्दी ढूंढ सकता है।
इंडेक्स के कुछ नुकसान भी हैं, जैसे:
-
राइट ऑपरेशंस धीमे होना:
INSERT,UPDATE, औरDELETEऑपरेशंस धीमे होते हैं क्योंकि डेटा बदलने पर हर बार इंडेक्स अपडेट करना पड़ता है। -
स्टोरेज लागत: इंडेक्स के लिए अतिरिक्त स्टोरेज स्पेस चाहिए।
23. किसी SQL टेबल में प्रोडक्ट का वेट और प्राइस किस डेटा टाइप में रखें, और क्यों?
वेट के लिए, सामान्यतः DECIMAL अधिक सुरक्षित विकल्प है। जबकि FLOAT और REAL दशमलव मान स्टोर कर सकते हैं, वे फ्लोटिंग-पॉइंट अरिथमेटिक का उपयोग करते हैं, जो छोटे राउंडिंग एरर ला सकते हैं।
जहाँ सटीकता महत्वपूर्ण है (जैसे शिपिंग कैलकुलेशन, इन्वेंटरी) वहां DECIMAL(8, 3) तीन दशमलव स्थानों के साथ सटीक नियंत्रण देता है और राउंडिंग की समस्या नहीं होती। FLOAT केवल तब स्वीकार्य है जब थोड़ी त्रुटि सहनीय हो।
24. आप विंडो फंक्शन के साथ SQL में डुप्लिकेट पंक्तियाँ कैसे ढूंढेंगे?
यहाँ ROW_NUMBER() विंडो फंक्शन का उपयोग करके डुप्लिकेट ढूंढने का तरीका है:
WITH DuplicateCheck AS (
SELECT product_name,
category,
ROW_NUMBER() OVER(
PARTITION BY product_name, category
ORDER BY id
) AS row_num
FROM sales
)
SELECT *
FROM DuplicateCheck
WHERE row_num > 1;
आइए समझें यह कैसे काम करता है:
1. ROW_NUMBER() हमारे परिणाम की प्रत्येक पंक्ति को एक नंबर देता है।
2. PARTITION BY पंक्तियों को product_name और category के आधार पर समूहित करता है।
3. प्रत्येक समूह के भीतर, पंक्तियाँ 1 से नंबरिंग शुरू होती हैं।
4. कोई भी row_num जो 1 से बड़ा है, डुप्लिकेट को दर्शाता है।
उदाहरण के लिए, यदि हमारे पास ये रिकॉर्ड हैं:
- Product A, Category X, row_num = 1
- Product A, Category X, row_num = 2 (डुप्लिकेट)
- Product B, Category Y, row_num = 1
क्वेरी हमें दूसरी पंक्ति दिखाएगी क्योंकि उसका row_num 1 से बड़ा है।
25. आप MySQL में पैरामीटर्स के साथ स्टोर्ड प्रोसीजर कैसे बनाएँगे और उपयोग करेंगे? उदाहरण सहित समझाइए।
हम स्टोर्ड प्रोसीजर्स से जटिल क्वेरियों को सेव और रीयूज कर सकते हैं, जिससे डेटाबेस ऑपरेशंस अधिक प्रभावी और मेंटेन करने में आसान बनते हैं। आइए एक व्यावहारिक उदाहरण से देखें कि पैरामीटर्स के साथ इन्हें कैसे बनाते और उपयोग करते हैं।
मान लीजिए हमारे पास एक स्टूडेंट डेटाबेस है और हम आयु के आधार पर छात्रों को फ़िल्टर करने के लिए प्रोसीजर बनाना चाहते हैं। ऐसा इस प्रकार करें:
पहले, एक सरल स्टोर्ड प्रोसीजर बनाते हैं जो एक आयु पैरामीटर लेता है:
CREATE PROCEDURE get_student_info(IN age INT)
BEGIN
SELECT * FROM student WHERE student.age = age;
END;
इस प्रोसीजर का उपयोग करने के लिए, बस इच्छित आयु के साथ CALL करें:
CALL get_student_info(21);
हम आउटपुट पैरामीटर्स का उपयोग करके प्रोसीजर्स को और परिष्कृत बना सकते हैं। उदाहरण के लिए, किसी विशिष्ट आयु के छात्रों की गिनती करने वाला प्रोसीजर बनाते हैं:
CREATE PROCEDURE count_students_by_age(IN age INT, OUT student_count INT)
BEGIN
SELECT COUNT(*) INTO student_count FROM students WHERE students.age = age;
END;
इस प्रोसीजर से परिणाम पाने के लिए:
SET @count = 0;
CALL count_students_by_age(21, @count);
SELECT @count AS total_students;
26. डेटाबेस में रेफ़रेंशियल इंटीग्रिटी क्यों महत्वपूर्ण है?
रेफ़रेंशियल इंटीग्रिटी टेबल्स के बीच रिश्तों को सटीक रखती है। जब हम फॉरेन की बनाते हैं, तो यह सुनिश्चित करती है कि किसी टेबल के मान रेफ़रेंस्ड टेबल में यूनिक मान से मेल खाते हों।
एक व्यावहारिक उदाहरण: मान लीजिए आप एक ई-कॉमर्स डेटाबेस प्रबंधित कर रहे हैं। आपके पास Customers टेबल और Orders टेबल है। हर ऑर्डर किसी वास्तविक ग्राहक से सम्बद्ध होना चाहिए। फॉरेन की के माध्यम से लागू रेफ़रेंशियल इंटीग्रिटी इस रिश्ते को लागू करती है, यह सुनिश्चित करके कि:
- आप किसी अस्तित्वहीन ग्राहक के लिए ऑर्डर नहीं बना सकते।
- आप मौजूदा ऑर्डर्स वाले ग्राहक को डिलीट नहीं कर सकते (जब तक कि आप विशेष रूप से यह कॉन्फ़िगर न करें कि उन ऑर्डर्स का क्या हो)।
- आप उस ग्राहक का ID अपडेट नहीं कर सकते जिसके ऑर्डर्स मौजूद हैं।
तो जब आप इस तरह फॉरेन की कंस्ट्रेंट बनाते हैं:
ALTER TABLE Orders
ADD FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);
डेटाबेस अपने-आप ये नियम लागू करता है:
-
Ordersटेबल में हरCustomerID,Customersटेबल में मौजूद होना चाहिए। -
इन नियमों का उल्लंघन करने के प्रयास (जैसे अवैध
CustomerIDइन्सर्ट करना) अस्वीकार कर दिए जाएंगे।
यह डेटा असंगतताओं को रोकता है, जो गंभीर समस्याएँ पैदा कर सकती हैं—जैसे ऐसे ऑर्डर्स जिन्हें वास्तविक ग्राहकों तक ट्रेस नहीं किया जा सकता, या रिपोर्ट्स जिनमें ग्राहक जानकारी गायब हो।
डेटाबेस एडमिनिस्ट्रेटर्स के लिए MySQL इंटरव्यू प्रश्न
यदि आप विशेष रूप से डेटाबेस एडमिनिस्ट्रेटर की भूमिका के लिए आवेदन कर रहे हैं, तो रिक्रूटर्स ये प्रश्न पूछ सकते हैं।
27. कोई बड़ी एप्लीकेशन डेटाबेस शार्डिंग क्यों उपयोग करेगी? साथ ही, इससे जुड़ी चुनौतियों के बारे में बताइए।
बड़ी एप्लीकेशन भारी डेटा को कई सर्वर्स में बांटने के लिए डेटाबेस शार्डिंग का उपयोग करती है। प्रत्येक भाग या शार्ड में डेटा का एक छोटा हिस्सा होता है। चूंकि यह डेटा लोड को वितरित करता है, इसलिए हाई-एंड हार्डवेयर की ज़रूरत नहीं पड़ती। स्पीड और स्केलेबिलिटी में सुधार होता है, लेकिन कुछ चुनौतियाँ भी हैं:
- कुछ क्वेरियाँ जैसे joins काम नहीं कर पातीं, जो डेटा मैनेजमेंट को जटिल बना सकती हैं।
- डेटा बढ़ने पर, शार्ड्स ओवरवेल्म हो सकते हैं, जिससे हॉटस्पॉट बनते हैं और परफॉर्मेंस धीमी होती है।
28. MySQL क्रैश रिकवरी में रीडू लॉग्स की क्या भूमिका होती है?
जब भी MySQL में डेटा संशोधित होता है, उसे डिस्क पर लिखा जाना चाहिए। लेकिन सीधे डेटा फाइल्स पर लिखना धीमा और जोखिमभरा होता है। इसलिए MySQL किसी भी डेटा फाइल में बदलाव करने से पहले, वह जो करने जा रहा है, उसे पहले रीडू लॉग में लिखता है। यह डेटा फाइल्स को बेतरतीब ढंग से अपडेट करने से अधिक सुरक्षित है।
मान लीजिए आप किसी ग्राहक का पता अपडेट करते हैं:
- MySQL पहले इस बदलाव को रीडू लॉग में लिखता है।
- फिर वह आपके ट्रांज़ैक्शन को committed मानकर स्वीकार करता है।
- अंततः, वह बदलाव को वास्तविक डेटा फाइल्स पर लागू कर देता है।
क्रैश रिकवरी महत्वपूर्ण तब होती है जब MySQL चरण 1 या 2 के बाद, लेकिन चरण 3 से पहले क्रैश हो जाए। MySQL रीस्टार्ट होने पर अपने रीडू लॉग्स देखता है और उनमें रिकॉर्ड किए गए बदलावों को रिप्ले करके अधूरा काम पूरा करता है। यह सुनिश्चित करता है कि committed ट्रांज़ैक्शंस खोए नहीं, भले ही MySQL असुविधाजनक समय पर क्रैश हो जाए।
29. MySQL में उपलब्ध अलग-अलग स्टोरेज इंजन कौन-से हैं, और वे कैसे भिन्न हैं?
MySQL कई स्टोरेज इंजन सपोर्ट करता है, जो अलग-अलग उपयोग मामलों के लिए ऑप्टिमाइज़्ड हैं। यहाँ सबसे सामान्य इंजनों की तुलना है:
| Storage Engine | Key Features | Best For |
|---|---|---|
| InnoDB | डिफॉल्ट इंजन। ACID-अनुरूप, रो-लेवल लॉकिंग, ट्रांज़ैक्शंस और फॉरेन कीज। | ई-कॉमर्स, वित्तीय सिस्टम, जहाँ डेटा अखंडता आवश्यक हो। |
| MyISAM | तेज़ रीड्स, टेबल-लेवल लॉकिंग। ट्रांज़ैक्शंस या फॉरेन कीज नहीं। | रीड-हेवी ऐप्स जहाँ स्पीड इंटीग्रिटी से अधिक महत्वपूर्ण हो। |
| Memory | डेटा RAM में स्टोर होता है। अत्यधिक तेज़, लेकिन रीस्टार्ट पर खो जाता है। | कैशिंग, सेशन मैनेजमेंट, अस्थायी डेटा। |
| CSV | डेटा साधारण CSV फाइल्स के रूप में स्टोर करता है। कोई इंडेक्सिंग नहीं। | ऐप्स के बीच डेटा एक्सचेंज या सरल फ्लैट-फाइल स्टोरेज। |
| Archive | उच्च कंप्रेशन। केवल INSERT और SELECT। कोई इंडेक्स नहीं। | लॉग डेटा या शायद ही क्वेरी होने वाले ऐतिहासिक रिकॉर्ड्स। |
| NDB (Clustered) | डिस्ट्रिब्यूटेड स्टोरेज, उच्च उपलब्धता, फॉल्ट-टॉलरेंट, ट्रांज़ैक्शंस सपोर्ट। | रीयल-टाइम परफॉर्मेंस चाहने वाले बड़े डिस्ट्रिब्यूटेड ऐप्स। |
30. आप MySQL में डिफॉल्ट स्टोरेज इंजन कैसे सेट करेंगे?
पहले, आप वर्तमान डिफॉल्ट स्टोरेज इंजन जाँच सकते हैं:
SHOW ENGINES;
InnoDB को डिफॉल्ट इंजन के रूप में अनुशंसित किया जाता है क्योंकि यह इन महत्वपूर्ण फीचर्स को सपोर्ट करता है:
- ACID-अनुरूप ट्रांज़ैक्शंस
- फॉरेन की कंस्ट्रेंट्स
- क्रैश रिकवरी
- रो-लेवल लॉकिंग
मेरे वर्तमान सेशन के लिए डिफॉल्ट इंजन अस्थायी रूप से बदलने के लिए, आप यह उपयोग कर सकते हैं:
SET default_storage_engine = 'InnoDB';
स्थायी बदलाव के लिए, MySQL कॉन्फ़िगरेशन फाइल में [mysqld] सेक्शन के अंतर्गत यह लाइन जोड़ें:
default-storage-engine = InnoDB
31. आप MySQL में करप्टेड टेबल्स को कैसे रिपेयर करेंगे?
पहले, आप यह कमांड चलाकर सभी डेटाबेस चेक कर सकते हैं:
mysqlcheck --check --all-databases -u root -p
यह सभी टेबल्स को स्कैन करेगा और अगर कोई करप्शन है तो रिपोर्ट करेगा। फिर आप टेबल को रिपेयर करने के लिए यह कमांड चला सकते हैं:
mysqlcheck --repair database_name table_name -u root -p
गंभीर करप्शन के मामलों में रिपेयर से डेटा लॉस हो सकता है, इसलिए डेटा का बैकअप ज़रूर लें।
परिदृश्य-आधारित और समस्या-समाधान MySQL इंटरव्यू प्रश्न
ये प्रश्न वास्तविक दुनिया के जटिल परिदृश्यों और आपकी समस्या-सुलझाने की क्षमता का आकलन करते हैं।
32. एक ऐसा परिदृश्य समझाइए जहाँ आपने MySQL में सबक्वेरियों का उपयोग किया हो।
ऐसे प्रश्न का उत्तर आप इस प्रकार दे सकते हैं:
मैंने अपनी हाल की नौकरी में एक ई-कॉमर्स स्टोर का डेटाबेस मैनेज किया, जहाँ मुझे प्रोडक्ट रिपोर्ट तैयार करनी थी। लक्ष्य था उन प्रोडक्ट्स को ढूंढना जिन्होंने औसत से अधिक बिक्री की—इसके लिए इस बहु-चरणीय विश्लेषण में सबक्वेरियों का उपयोग आवश्यक था।
इसे हल करने के लिए मैंने यह SQL क्वेरी बनाई:
SELECT
p.product_id,
p.product_name,
s.sales_amount
FROM products p
JOIN sales s ON p.product_id = s.product_id
WHERE s.sales_amount > (
SELECT AVG(sales_amount)
FROM sales
)
ORDER BY s.sales_amount DESC;
सबसे पहले, मैंने सभी प्रोडक्ट्स की औसत बिक्री राशि निकालकर बेसलाइन तय की। इसके लिए मैंने WHERE क्लॉज़ में एक सबक्वेरी का उपयोग किया जिसने सेल्स टेबल से AVG(sales_amount) की गणना की। यह सबक्वेरी एक डायनेमिक थ्रेशोल्ड की तरह काम करती थी, जिसके मुकाबले हर प्रोडक्ट के प्रदर्शन को मापा जा सकता था।
मुख्य क्वेरी ने फिर प्रोडक्ट्स और सेल्स टेबल्स को जोड़कर सम्बंधित प्रोडक्ट विवरण निकाले, जबकि WHERE क्लॉज़ ने हमारे निकाले गए औसत से कम बिक्री वाले प्रोडक्ट्स को फ़िल्टर कर दिया।
क्वेरी को इस तरह संरचित करके, मैं एक ही डेटाबेस ऑपरेशन में उच्च-प्रदर्शन करने वाले प्रोडक्ट्स की पहचान कर सका/सकी, बजाय कई अलग-अलग क्वेरियाँ चलाने के।
33. क्या आप ऐसी स्थिति समझा सकते हैं जहाँ आपने कई टेबल्स से डेटा जोड़ने के लिए SQL joins का उपयोग किया हो?
ऊपर दिए गए प्रश्न का एक उदाहरण उत्तर:
हाल ही में, मैं एक प्रोजेक्ट पर काम कर रहा/रही था/थी जहाँ दो मुख्य टेबल्स थीं — एक में प्रोडक्ट सेल्स डेटा और दूसरी में प्रोडक्ट डिटेल्स। मेरा काम एक रिपोर्ट बनाना था जो sales, product name, category, और price दिखाए।
सम्बंधित डेटा जोड़ने के लिए, मैंने कॉमन कॉलम product_id पर INNER JOIN का उपयोग किया, जिससे सेल्स ट्रांज़ैक्शंस को प्रोडक्ट डिटेल्स से जोड़ा जा सके:
SELECT
s.sales_date,
p.product_name,
p.category,
s.quantity_sold,
p.price
FROM
sales s
INNER JOIN
products p
ON
s.product_id = p.product_id;
रिपोर्ट ने सेल्स ट्रेंड्स की स्पष्ट तस्वीर दी, जिससे स्टेकहोल्डर्स समझ सके कि कौन-सी प्रोडक्ट कैटेगरी अच्छा प्रदर्शन कर रही है और किन्हें ध्यान देने की जरूरत है।
34. क्या आपका ट्रिगर्स के साथ कोई अनुभव है? बताइए आपने उन्हें कैसे इस्तेमाल किया।
ऊपर दिए गए प्रश्न का एक उदाहरण उत्तर:
हाँ, मेरा डेटाबेस ट्रिगर्स के साथ व्यापक अनुभव है। अपनी हाल की भूमिका में, मैंने प्राइस चेंज ऑडिटिंग के लिए एक AFTER UPDATE ट्रिगर इम्प्लिमेंट किया।
मैं आपको विशिष्ट इम्प्लिमेंटेशन बताता/बताती हूँ: मैंने एक ट्रिगर बनाया जो जब भी किसी प्रोडक्ट की कीमत बदलती है, प्राइस हिस्ट्री को अपने-आप कैप्चर कर लेता है। यह रहा वह SQL स्क्रिप्ट जो मैंने विकसित की:
CREATE TRIGGER tr_AuditPriceChanges
AFTER UPDATE ON Products
FOR EACH ROW
BEGIN
-- Only log if the price actually changed
IF OLD.UnitPrice <> NEW.UnitPrice THEN
INSERT INTO PriceAudit (
ProductID,
OldPrice,
NewPrice,
ChangedBy,
ChangeDate,
PercentageChange
)
VALUES (
NEW.ProductID,
OLD.UnitPrice,
NEW.UnitPrice,
CURRENT_USER(),
NOW(),
ROUND(((NEW.UnitPrice - OLD.UnitPrice) / OLD.UnitPrice * 100), 2)
);
END IF;
END;
यह समाधान खास तौर पर इसलिए प्रभावी रहा क्योंकि:
- यह तभी फायर होता है जब वाकई कीमत में बदलाव हो।
- यह बदलाव करने वाले यूज़र को
SYSTEM_USERके जरिए कैप्चर करता है। - यह रिपोर्टिंग के लिए प्रतिशत बदलाव की गणना करता है।
- यह अन्य कॉलम अपडेट्स से होने वाले नॉन-चेंजेज़ को फ़िल्टर करने के लिए
WHEREक्लॉज़ शामिल करता है।
हमने NULL प्राइस वाले कुछ एज केस नोटिस किए, तब मैंने एरर हैंडलिंग और लॉगिंग भी जोड़ी।
MySQL इंटरव्यू की तैयारी के लिए टिप्स
यदि आप अपना करियर शुरू कर रहे हैं, तो यहाँ कुछ टिप्स हैं जो आपके आगामी इंटरव्यू में सफल होने में मदद करेंगी:
MySQL के कोर कॉन्सेप्ट्स में निपुण बनें: डेटाबेस के मूल सिद्धांत जैसे इंडेक्सिंग, ट्रांज़ैक्शंस और क्वेरी ऑप्टिमाइज़र सीखें। समझें कि MySQL क्वेरियों को कैसे प्रोसेस करता है और डेटा स्टोरेज कैसे मैनेज करता है। इससे आप कुशल क्वेरियाँ लिख पाएँगे और इंटरव्यू के दौरान अपने समाधान समझा पाएँगे।
हैंड्स-ऑन अनुभव लें: अपने कंप्यूटर पर MySQL इंस्टॉल करें और नियमित अभ्यास करें। टेस्ट डेटाबेस बनाएं, अलग-अलग प्रकार की क्वेरियाँ लिखें, और उन्हें ऑप्टिमाइज़ करने की कोशिश करें। वास्तविक अभ्यास से ही चीज़ें समझ आती हैं और इंटरव्यू के लिए आत्मविश्वास बनता है।
अपना ज्ञान और निखारने के लिए, DataCamp के संसाधन देखें:
- SQL पर परिचय: Introduction to SQL Course
- SQL का अभ्यास करने के लिए: Applying SQL to real-world problems
MySQL टूल्स और इंटीग्रेशंस के बारे में जानें: डेटाबेस मैनेजमेंट और बेसिक मॉनिटरिंग के लिए MySQL Workbench या अन्य टूल्स से वाकिफ़ हों। आप Python के साथ MySQL कैसे काम करता है और सम्बंधित फ़्रेमवर्क्स भी एक्सप्लोर कर सकते हैं, जिससे आप दिखा पाएँगे कि आप वास्तविक डेवलपमेंट वातावरण में काम कर सकते हैं।
निष्कर्ष
बस इतना ही! मैंने आपके अगले जॉब को हासिल करने में मदद के लिए शीर्ष 34 MySQL इंटरव्यू प्रश्न कवर किए हैं। चाहे आप एंट्री-लेवल रोल के लिए अप्लाई कर रहे हों या एडवांस्ड डेटा एडमिनिस्ट्रेटर पोज़िशन के लिए, अलग दिखने के लिए MySQL की मूल बातें, क्वेरी ऑप्टिमाइज़ेशन, और डेटाबेस मैनेजमेंट पर आपकी पकड़ मज़बूत होनी चाहिए।
अन्य डेटाबेस मैनेजमेंट सिस्टम्स का अपना ज्ञान और बढ़ाने के लिए देखें DataCamp के SQL courses।