Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

शीर्ष 5 MySQL T-SQL डेवलपर्स के लिए युक्तियों के साथ सिंटैक्स हटाएं

MySQL की हमारी यात्रा CREATE TABLE और उसके बाद INSERT से शुरू हुई। आज, हम MySQL DELETE स्टेटमेंट पर आगे बढ़ रहे हैं। यह लगभग MySQL UPDATE स्टेटमेंट जितना ही सामान्य है।

चूंकि आप T-SQL DELETE से परिचित हैं, इसलिए लक्ष्य आपको MySQL सिंटैक्स का उपयोग करके अधिक उत्पादक बनाना है। इन DELETE कथनों में मामूली अंतर हैं, लेकिन ऐसा कुछ भी नहीं है जिसे आप संभाल नहीं सकते। आइए शुरू करें।

नमूना डेटा तैयार करना

सबसे आम जरूरतों में से एक है MySQL डिलीट रो टास्क। हम यहां इसकी जांच करेंगे, लेकिन पहले हमें अपना कार्यक्षेत्र तैयार करना होगा। किसी भी रिकॉर्ड को हटाने के लिए, हमें सबसे पहले उन्हें रखना होगा। इस प्रकार, आइए MySQL में एक डेटाबेस बनाते हैं।

मैं 80 के दशक से टीवी श्रृंखला के बारे में उदासीन महसूस कर रहा हूं, इसलिए मैं नमूना डेटा के लिए मैकगाइवर और क्वांटम लीप के एपिसोड का उपयोग करने जा रहा हूं। मेरे पास एक नए डेटाबेस में डेटा आयात करने के लिए अंतिम एक्सेल फ़ाइल है। इस फ़ाइल में शीर्षक . नाम की 2 शीट हैं और एपिसोड . हम उन दोनों को दो तालिकाओं में आयात करेंगे।

डेटा आयात करने से पहले, हमें टीवी-श्रृंखला . नामक एक डेटाबेस के साथ आना चाहिए शीर्षक . नामक दो तालिकाओं के साथ और एपिसोड . MySQL क्रिएट टेबल जॉब उचित टूल के साथ प्राथमिक है। मैं MySQL के लिए dbForge Studio का उपयोग कर रहा हूं, और निम्नलिखित आंकड़े 1 और 2 उस टूल द्वारा प्रस्तुत मेरे डेटाबेस की दृश्य तालिका संरचना प्रदर्शित करते हैं।

तालिकाओं के लिए स्क्रिप्ट नीचे है:

CREATE DATABASE IF NOT EXISTS `tv-series`;

USE `tv-series`;

CREATE TABLE `tv-series`.titles (
  TitleID int NOT NULL AUTO_INCREMENT,
  Title varchar(50) DEFAULT NULL,
  `From` int DEFAULT NULL,
  `To` int DEFAULT NULL,
  PRIMARY KEY (TitleID)
)
ENGINE = INNODB,
AUTO_INCREMENT = 3,
AVG_ROW_LENGTH = 8192,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_0900_ai_ci;

CREATE TABLE `tv-series`.episodes (
  EpisodeID int NOT NULL AUTO_INCREMENT,
  TitleID int DEFAULT NULL,
  EpisodeTitle varchar(100) DEFAULT NULL,
  AirDate date DEFAULT NULL,
  Synopsis text DEFAULT NULL,
  EpisodeNo int NOT NULL,
  SeasonNo int NOT NULL,
  PRIMARY KEY (EpisodeID)
)
ENGINE = INNODB,
AUTO_INCREMENT = 160,
AVG_ROW_LENGTH = 414,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_0900_ai_ci;

ALTER TABLE `tv-series`.episodes
ADD INDEX IDX_episodes_TitleID (TitleID);

डेटाबेस और टेबल बनाने के बाद, हम एक्सेल फ़ाइल से अपना डेटा आयात कर सकते हैं।

MySQL में एक्सेल फाइलों को आयात करने के लिए मैंने जो सबसे सीधा और शक्तिशाली टूल इस्तेमाल किया है, वह है MySQL के लिए dbForge Studio। मैं विशेष रूप से लक्ष्य तालिका में प्राथमिक कुंजी के रूप में एक नया कॉलम जोड़ने की सराहना करता हूं। साथ ही, ऑटोडेटेक्ट दिनांक और समय प्रारूप बहुत अच्छा समर्थन है। यह बिना किसी परेशानी के टेक्स्ट डेटा प्रकार और अजीब तारीख प्रारूपों के साथ तिथियों को परिवर्तित करता है।

चूंकि हम MySQL सिंटैक्स की तुलना T-SQL से करने जा रहे हैं, आप SQL सर्वर पर एक नए डेटाबेस में एक्सेल फ़ाइल भी आयात कर सकते हैं। फिर, उसी डेटाबेस और टेबल नामों का उपयोग करें जैसे MySQL में होता है।

अधिक जानकारी

  • MySQL के लिए dbForge Studio में MySQL आयात और निर्यात उपकरण

1. तालिका से सभी डेटा हटाएं

सबसे पहले, सबसे आसान। आइए एपिसोड का बैक अप लेने का प्रयास करें तालिका और फिर बैकअप के रिकॉर्ड को हटा दें। हम मानक MySQL को सभी पंक्तियों के संचालन को हटा देंगे जो आपको विभिन्न स्थितियों में करने की आवश्यकता हो सकती है।

CREATE TABLE episodes_backup AS
SELECT * FROM episodes;

DELETE FROM episodes_backup;

जैसा कि आप देखते हैं, सिंटैक्स टी-एसक्यूएल के समान है। क्वेरी एपिसोड_बैकअप . के सभी रिकॉर्ड हटा देगी टेबल।

आपके लिए कुछ नोट्स:

  1. यदि आपको कई पंक्तियों या सभी पंक्तियों को हटाना है, तो TRUNCATE TABLE WHERE क्लॉज के बिना DELETE से तेज है। यह MySQL और SQL सर्वर दोनों के लिए सही है।
  2. उपरोक्त कोड को MySQL वर्कबेंच में निष्पादित करने से त्रुटि कोड 1175 ट्रिगर होगा . इसकी अनुमति नहीं है क्योंकि MySQL वर्कबेंच सुरक्षित मोड अपडेट के लिए डिफ़ॉल्ट है। इस प्रकार, WHERE क्लॉज के बिना किसी तालिका को हटाने या अपडेट करने की अनुमति नहीं है। फिर भी आप प्राथमिकताएं . में इस सुविधा को अक्षम कर सकते हैं ।

2. MySQL में WHERE हटाएं

दूसरा बिंदु एक शर्त के साथ DELETE का उपयोग करने के बारे में है, MySQL चुनिंदा ऑपरेशन से हटा देता है। इस तरह, आप एक या एक से अधिक रिकॉर्ड को एक स्टेटमेंट में डिलीट कर सकते हैं, लेकिन सभी को नहीं। उदाहरण के लिए, पहली पंक्ति या अन्य विशिष्ट पंक्ति/पंक्तियों को हटा दें। क्या होगा यदि आप SQL में डुप्लिकेट रिकॉर्ड से बचने का तरीका ढूंढ रहे हैं? WHERE कंडीशन का उपयोग करना समाधान होगा।

फिर से, T-SQL में सिंटैक्स समान है:

-- Delete 1 record using an equality operator
DELETE FROM episodes
WHERE EpisodeID = 150;

-- Delete 3 records using IN
DELETE FROM episodes
WHERE EpisodeID IN (151,152,153);

यहां कुछ भी असाधारण नहीं है, लेकिन अगला भाग अलग होगा।

3. MySQL DELETE LIMIT

सीमा? क्या सीमा?

LIMIT T-SQL में TOP के बराबर है। इससे पहले कि हमारे पास एक DELETE उदाहरण हो, आइए उन क्वेरी रिकॉर्ड्स को देखें जिन्हें हम हटाने जा रहे हैं। नीचे दिए गए कोड को देखें:

SELECT * FROM episodes
WHERE year(AirDate) = 1987
ORDER BY SeasonNo, EpisodeNo
LIMIT 2;

यहाँ आपकी LIMIT है। इसके परिणामस्वरूप 2 रिकॉर्ड होंगे जैसा कि MySQL के लिए dbForge Studio में कार्ड दृश्य के लिए चित्र 3 में दिखाया गया है:

अब, आइए उन्हें हटाने का प्रयास करें। नीचे दिए गए उदाहरण पर एक नज़र डालें:

DELETE FROM episodes
WHERE year(AirDate) = 1987
ORDER BY SeasonNo, EpisodeNo
LIMIT 2;

2 एपिसोड्स को डिलीट करने से पहले, MySQL ने 1987 के सभी एपिसोड्स को क्वेर किया। फिर इसने उन्हें सीज़न और एपिसोड नंबर्स में सॉर्ट किया। अंत में, इसने परिणामों को 2 रिकॉर्ड तक सीमित कर दिया। यह एक उपयुक्त तरीका भी है जब हमें डुप्लिकेट पंक्तियों को हटाने की आवश्यकता होती है। यह हमें हटाने के लिए शर्तों को निर्दिष्ट करने देता है और सुनिश्चित करता है कि हम कुछ भी आवश्यक नहीं हटाएंगे (लेकिन बैकअप बनाने से डेटा सुरक्षा अभी भी प्रदान होगी)।

क्या कोई टी-एसक्यूएल समकक्ष है? क्या आपको लगता है कि यह काम करेगा?

DELETE TOP (2) FROM episodes
WHERE year(AirDate) = 2020
ORDER BY SeasonNo, EpisodeNo
GO

यदि आप उपरोक्त कोड को SQL सर्वर प्रबंधन स्टूडियो में पेस्ट करते हैं, तो आपको ORDER BY क्लॉज में स्क्विगली लाइनें मिलेंगी। फिर भी, TOP की अनुमति है।

यदि आप ORDER BY खंड को हटा देते हैं, तो आपकी क्वेरी 2 यादृच्छिक रिकॉर्ड हटा देगी। अंत में, उपरोक्त कोड अपेक्षा के अनुरूप नहीं चलेगा।

MySQL के समान परिणाम प्राप्त करने के लिए, आपको निम्न कोड की आवश्यकता होगी:

DELETE FROM episodes
WHERE EpisodeID IN
(SELECT TOP 2 EpisodeID FROM Episodes
 WHERE YEAR(AirDate) = 1987
 ORDER BY SeasonNo, EpisodeNo)

यह MySQL की तुलना में T-SQL में थोड़ा लंबा है। लेकिन और भी बहुत कुछ है।

4. MySQL DELETE with JOIN

रिकॉर्ड्स को हटाने का दूसरा तरीका इसे जॉइन के साथ उपयोग करना है जो उन रिकॉर्ड्स को फ़िल्टर करेगा जिन्हें आप हटाना चाहते हैं। जितने उपयोगकर्ता इसे परिभाषित करते हैं, यह MySQL डिलीट ज्वाइन टास्क है। जब आप टेबल एलियास का उपयोग नहीं कर रहे हैं तो कुछ भी अलग नहीं दिखता है। नीचे दिए गए उदाहरण की जाँच करें:

DELETE episodes
FROM episodes
INNER JOIN titles ON titles.TitleID = episodes.TitleID
WHERE titles.TitleID = 3
AND episodes.SeasonNo = 3;

यह टी-एसक्यूएल में भी काम करेगा। लेकिन अगर हम इस तरह एक टेबल उपनाम का उपयोग करते हैं:

DELETE episodes
FROM episodes e
INNER JOIN titles t ON t.TitleID = e.TitleID
WHERE t.TitleID = 3
AND e.SeasonNo = 3;

MySQL एक त्रुटि फेंक देगा। सही सिंटैक्स नीचे है:

DELETE e
FROM episodes e
INNER JOIN titles t ON t.TitleID = e.TitleID
WHERE t.TitleID = 3
AND e.SeasonNo = 3;

अंतर नोट करें!

5. MySQL में सबक्वेरी हटाएं

अंत में, हम सबक्वेरी का उपयोग करने का प्रयास करते हैं। यह उन रिकॉर्ड्स को फ़िल्टर करने का एक अलग तरीका है जिन्हें आप हटाना चाहते हैं। आप पहले ही एक उदाहरण देख चुके हैं, लेकिन चलिए इसे फिर से करते हैं:

DELETE FROM episodes
WHERE EpisodeID IN
(SELECT TOP 2 EpisodeID FROM Episodes
 WHERE YEAR(AirDate) = 1987
 ORDER BY SeasonNo, EpisodeNo)

यह टी-एसक्यूएल में पूरी तरह से मान्य सिंटैक्स है। लेकिन क्या यह MySQL में काम करेगा? आइए इसे थोड़ा बदल दें:

DELETE FROM episodes
WHERE EpisodeID IN
(SELECT EpisodeID FROM Episodes
 WHERE YEAR(AirDate) = 1987
 ORDER BY SeasonNo, EpisodeNo
 LIMIT 2);

उफ़! ऐसा लगता है कि हम दीवार से टकरा गए हैं। यहाँ MySQL क्या कहता है:

MySQL का यह संस्करण अभी तक 'LIMIT &IN/ALL/ANY/SOME सबक्वेरी' का समर्थन नहीं करता है

क्या होगा यदि हम LIMIT कीवर्ड हटा दें? यह एक और त्रुटि को ट्रिगर करता है:

आप FROM क्लॉज में अपडेट के लिए लक्ष्य तालिका 'एपिसोड' निर्दिष्ट नहीं कर सकते।

क्या आसपास कोई काम है? कोड को नेस्टेड सबक्वेरी में बदलना ठीक चलेगा:

DELETE FROM episodes
WHERE EpisodeID IN
(SELECT EpisodeID FROM (SELECT EpisodeID FROM Episodes
 WHERE YEAR(AirDate) = 1987
 ORDER BY SeasonNo, EpisodeNo
 LIMIT 5) AS T)

इससे हो जाना चाहिए। लेकिन आइए एक और समझदार उदाहरण देखें:

DELETE FROM episodes
WHERE TitleID IN
(SELECT TitleID FROM titles
 WHERE `From` BETWEEN 1995 AND 2000);

अब, इन उदाहरणों में क्या बड़ी बात है? आइए देखें:

  1. MySQL LIMIT कीवर्ड का उपयोग करके एक सबक्वेरी फ़िल्टर के साथ DELETE स्टेटमेंट को स्वीकार नहीं करेगा। अभी नहीं।
  2. MySQL लक्ष्य तालिका से DELETE को फ़िल्टर करने वाली सबक्वेरी तालिका के बराबर स्वीकार नहीं करेगा।

[sendpulse-form id="13566″]

निष्कर्ष

अब तक सब ठीक है। आपके पास MySQL और T-SQL के लिए तीन DELETE सिंटैक्स तुलनाएं हैं। मुझे आशा है कि तीसरी किस्त भी भविष्य में आपके लिए उपयोगी सिद्ध होगी।

डिलीट करते समय इस पोस्ट ने MySQL सिंटैक्स पर प्रकाश डाला

  • सभी रिकॉर्ड,
  • WHERE क्लॉज के साथ 1 या अधिक रिकॉर्ड,
  • LIMIT का उपयोग करना,
  • जॉइन का उपयोग करना,
  • उपश्रेणियों का उपयोग करना।

आप आसानी से MySQL डिलीट कॉलम कार्य प्रदर्शन के तरीके देख सकते हैं, या शर्तों के अनुसार किसी भी पंक्ति, एकाधिक पंक्तियों और विशिष्ट रिकॉर्ड को हटा सकते हैं।

अगर आपको यह पोस्ट पसंद आया है, तो इसे अपने पसंदीदा सोशल मीडिया प्लेटफॉर्म पर साझा करने के लिए स्वतंत्र महसूस करें। हमें यह भी बताएं कि आप नीचे टिप्पणी अनुभाग में क्या सोचते हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql कॉलम को पंक्ति में बदलें (पिवट टेबल)

  2. MySQL में रैंडम पंक्तियों का चयन करना

  3. पुनरावर्ती ट्री बनाने के लिए पंक्तियों को पार करने के लिए MySQL क्वेरी का उपयोग करना

  4. CSV फ़ाइल को MySQL तालिका में कैसे आयात करें

  5. केस असंवेदनशील होने के लिए लिनक्स सर्वर में MySQL तालिका के नाम कैसे बदलें?