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

MySQL इंसर्ट कमांड बनाम टी-एसक्यूएल क्वेरी सिंटैक्स उदाहरणों के साथ

डेवलपर्स आजीवन छात्र हैं। जितनी जल्दी हो सके नया ज्ञान प्राप्त करना हमेशा हमारा टमटम होता है। यदि आप टी-एसक्यूएल शिविर से आ रहे हैं, तो MySQL सीखने का तेज़ तरीका क्या है? अक्सर आप सिंटैक्स की तुलना करना चाहते हैं। पिछली बार, आपने MySQL में एक टेबल बनाने के बारे में सीखा था। हमारी आज की पोस्ट आपको एक कदम और आगे ले जाएगी। हम MySQL INSERT के साथ रिकॉर्ड डालेंगे।

यह कितना आसान हो सकता है? दोनों डेटाबेस प्लेटफ़ॉर्म SQL का उपयोग करते हैं, लेकिन हम जानते हैं कि इन दोनों डेटाबेस उत्पादों में मानक SQL सिंटैक्स में कुछ जोड़ हैं। MySQL INSERT कोई अपवाद नहीं है।

इस प्रकार, यदि आप MySQL और SQL सर्वर के संदर्भों की तुलना करते-करते थक गए हैं, तो आज आपका भाग्यशाली दिन है। मैंने वाक्य रचना को क्यूरेट किया है और आपके लिए तुलना की है। इसके अलावा, हमारे पास जाँच करने के लिए उदाहरण होंगे। अंत में, हमारे पास एक और मुफ्त चीट शीट होगी।

अब, इससे पहले कि हम इसमें गोता लगाएँ, आप नीचे दिए गए ऑप्ट-इन फॉर्म को भरकर इस लेख के बारे में एक मुफ़्त पीडीएफ चीट शीट भी प्राप्त कर सकते हैं।

[sendpulse-form id="12097″]

तैयार? बढ़िया!

MySQL क्वेरी सिंटैक्स में सम्मिलित करें (तालिका मान निर्माता)

लेकिन इससे पहले कि हम विवरण में गोता लगाएँ, आइए कुछ बातें स्पष्ट करें:

  • मैं यहां जिस MySQL संस्करण का उपयोग कर रहा हूं, वह 8.0.23 है, जिसमें InnoDB स्टोरेज इंजन है।
  • SQL सर्वर संस्करण 2019 है।

सबसे पहले, आइए एक तालिका में एक रिकॉर्ड डालने का प्रयास करें। मूल सिंटैक्स SQL ​​सर्वर के समान है। हालांकि, ऐसा तब होता है जब आप डेटाबेस और स्कीमा नाम शामिल नहीं करते हैं और कॉलम नामों को बैकटिक्स के साथ संलग्न नहीं करते हैं।

CREATE TABLE testdatabase.people
(`ID` int NOT NULL PRIMARY KEY,
 `Lastname` varchar(50) NOT NULL,
 `FirstName` varchar(50) NOT NULL,
 `MiddleName` varchar(50) NULL DEFAULT '',
 `Rank` varchar(20) NOT NULL,
 `Ship` varchar(50) NOT NULL,
 `ShipRegistry` varchar(20) NOT NULL,
 `ModifiedDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP());
  
INSERT INTO people
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`)
VALUES (3,'Archer','Jonathan','','Captain','Enterprise','NX-01');

तालिका का वास्तविक स्थान निर्दिष्ट करना थोड़ा अलग होगा। जैसा कि मैंने इस पोस्ट में संकेत दिया है, एक डेटाबेस MySQL में एक स्कीमा का पर्याय है। नीचे संशोधित नमूना देखें:

INSERT INTO testdatabase.people
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`)
VALUES (3,'Archer','Jonathan','','Captain','Enterprise','NX-01');

क्या आपने ऊपर स्कीमा नाम की अनुपस्थिति पर ध्यान दिया है?

इस बीच, ऊपर VALUES क्लॉज एक टेबल वैल्यू कंस्ट्रक्टर बनाता है। इसी तरह, SQL सर्वर में भी वह सुविधा होती है।

MySQL में टेबल्स में एकाधिक पंक्तियाँ सम्मिलित करें

आइए कई पंक्तियों को सम्मिलित करने का प्रयास करें।

INSERT INTO testdatabase.people
(ID, LastName, FirstName, MiddleName, Rank, Ship, ShipRegistry)
VALUES (4,'Janeway','Kathryn','', Captain','USS Voyager', 'NCC-74656'), 
       (5, 'Sisko','Benjamin','','Captain','USS Defiant','NX-74205');

उपरोक्त कोड दो टेबल वैल्यू कंस्ट्रक्टर्स का उपयोग करके दो रिकॉर्ड सम्मिलित करेगा। आप शाब्दिक मूल्यों के बजाय भावों का भी उपयोग कर सकते हैं। नीचे दिया गया उदाहरण प्रत्येक कॉलम के लिए एक सबक्वेरी का उपयोग करता है:

CREATE TABLE testdatabase.people2 LIKE people;

INSERT INTO testdatabase.people2
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`)
VALUES (4,'Janeway','Kathryn','','Captain','USS Voyager', 'NCC-74656'), 
       (5, (SELECT Lastname FROM people WHERE ID=5), 
           (SELECT Firstname FROM people WHERE ID=5), 
           (SELECT MiddleName FROM people WHERE ID=5),
           (SELECT `Rank` FROM people WHERE ID=5),
           (SELECT Ship FROM people WHERE ID=5),
           (SELECT ShipRegistry FROM people WHERE ID=5));

उपरोक्त क्वेरी में उपश्रेणियाँ बेमानी दिखती हैं। लेकिन यह एक त्रुटि उत्पन्न करेगा:

INSERT INTO testdatabase.people2
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`)
VALUES (4,'Janeway','Kathryn','','Captain','USS Voyager', 'NCC-74656'), 
       (SELECT `ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, 
        `Ship`, `ShipRegistry` FROM people);    -- ERROR!

तालिका मान निर्माता स्तंभ सूची में प्रत्येक फ़ील्ड के लिए एक शाब्दिक या एक अभिव्यक्ति की अपेक्षा करता है। इसके अलावा, पिछले उदाहरण में उपश्रेणियाँ एक पंक्ति को एक मान के साथ लौटाती हैं, और यह मान्य है। हालांकि, ऊपर दिया गया सेलेक्ट स्टेटमेंट एक एरर को ट्रिगर करेगा क्योंकि यह कई रो और कॉलम लौटाता है।

एक अन्य विकल्प नीचे दिए गए उदाहरण की तरह ROW कीवर्ड निर्दिष्ट करना है:

INSERT INTO testdatabase.people
(ID, LastName, FirstName, MiddleName, Rank, Ship, ShipRegistry)
VALUES ROW(4,'Janeway','Kathryn','', Captain','USS Voyager', 'NCC-74656'), 
       ROW(5, 'Sisko','Benjamin','','Captain','USS Defiant','NX-74205');

लेकिन INSERT कथन में ROW कीवर्ड SQL सर्वर में समर्थित नहीं है।

MySQL INSERT INTO के साथ किसी अन्य तालिका से चयन करें

आप SELECT कथन का उपयोग करके तालिका में रिकॉर्ड जोड़ सकते हैं:

INSERT INTO people2
(ID, Lastname, FirstName, MiddleName, `Rank`, Ship, ShipRegistry)
SELECT ID, Lastname, FirstName, MiddleName, `Rank`, Ship, ShipRegistry FROM people;

जैसा कि आप देख सकते हैं, यह डेटाबेस नाम, स्कीमा नाम और बैकटिक वर्ण के बिना टी-एसक्यूएल के साथ समान है। वैसे, रैंक एक आरक्षित शब्द है।

इसलिए, रैंक शब्द को संलग्न करने वाले बैकटिक वर्ण आवश्यक हैं।

आप इसे कॉलम सूची के बिना व्यक्त कर सकते हैं। लक्ष्य तालिका की स्तंभ व्यवस्था के समान क्रम में बस स्तंभ नाम निर्दिष्ट करें।

TRUNCATE TABLE testdatabase.people2;

INSERT INTO testdatabase.people2
SELECT ID, Lastname, FirstName, MiddleName, `Rank`, Ship, ShipRegistry, ModifiedDate 
FROM people;

SELECT * FROM testdatabase.people2

MySQL के लिए dbForge Studio से नीचे आउटपुट देखें:

बढ़िया है? आइए कॉलम मानों को संभालने के विषय पर अधिक विस्तार करें।

INSERT और टेबल्स कॉलम मान

MySQL INSERT का उपयोग करते समय यह खंड कॉलम मानों में गहराई से खुदाई करेगा। उनमें से चार हैं:

  • यूनिकोड मान।
  • डिफ़ॉल्ट मान.
  • स्वतः वृद्धि का उपयोग करना।
  • उपयोगकर्ता द्वारा परिभाषित चरों से मान।

यूनिकोड स्ट्रिंग डालें

T-SQL में, आप N . के साथ एक स्ट्रिंग मान से पहले से परिचित हैं . इसका उपयोग करते समय, SQL सर्वर मानता है कि मान एक यूनिकोड मान है। MySQL में, आपको इसकी आवश्यकता नहीं है।

नीचे दिया गया उदाहरण देखें:

CREATE TABLE IF NOT EXISTS UnicodeNames
(ID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
 FullName varchar(50) NOT NULL);

INSERT INTO UnicodeNames
(FullName)
VALUES ('김지수'),('김제니'),('박채영'),('ลลิษา มโนบาล');

SELECT * FROM UnicodeNames

ध्यान देने योग्य कुछ बिंदु हैं:

  1. MySQL 8 में तालिका बनाने में NVARCHAR का उपयोग करने से स्वचालित रूप से VARCHAR में बदल जाएगा।
  2. यूनिकोड मान से पहले N . के साथ आने की कोई आवश्यकता नहीं है , एन'김지수' की तरह।
  3. एसक्यूएल सर्वर में इसे सफलतापूर्वक चलाने के लिए आपको उपरोक्त कोड को थोड़ा संपादित करने की आवश्यकता है।

नीचे दिए गए परिणाम की जाँच करें:

यहाँ T-SQL में समतुल्य कोड है:

CREATE TABLE UnicodeNames
(ID int NOT NULL IDENTITY PRIMARY KEY,
 FullName nvarchar(50) NOT NULL);

INSERT INTO UnicodeNames
(FullName)
VALUES (N'김지수'),(N'김제니'),(N'박채영'),(N'ลลิษา มโนบาล');

SELECT * FROM UnicodeNames

उपरोक्त यूनिकोड मानों में से किसी एक से 'N' को निकालने का प्रयास करें। कोड ठीक चलेगा, लेकिन आप SQL सर्वर प्रबंधन स्टूडियो में नीचे दिए गए आउटपुट की जांच करें:

MySQL में डिफ़ॉल्ट मान कैसे डालें

जब आप कोई मान निर्दिष्ट किए बिना कोई रिकॉर्ड सम्मिलित करते हैं तो कॉलम डिफ़ॉल्ट मान कार्य करते हैं। हमने ऊपर के पहले उदाहरण में इसका इस्तेमाल किया था। यहां फिर से कॉलम की परिभाषा दी गई है:


`ModifiedDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP()

कॉलम संशोधित दिनांक सर्वर पर वर्तमान दिनांक और समय के लिए डिफ़ॉल्ट। इसलिए जब हमने ऐसा किया:

INSERT INTO testdatabase.people
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`)
VALUES (3,'Archer','Jonathan','','Captain','Enterprise','NX-01');

परिणाम यह है:

कीस्ट्रोक्स पर बहुत साफ और बचत। यही व्यवहार SQL सर्वर में भी होता है।

इस बीच, यदि आप इसे स्पष्ट करना चाहते हैं, तो केवल DEFAULT के मान के साथ कॉलम नाम निर्दिष्ट करें:

INSERT INTO testdatabase.people
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`, `ModifiedDate`)
VALUES (6, 'Pyke','Christopher','','Captain','USS Enterprise','NCC 1701', DEFAULT);

यह थोड़े से संशोधन के साथ SQL सर्वर में भी काम करता है।

एक और समय और कीस्ट्रोक सेवर है। इसमें एक ऑटोइनक्रिकमेंट कॉलम वैल्यू है।

इसमें डालें AUTO_INCREMENT कॉलम

तालिका पर अंतिम पूर्णांक मान प्राप्त करने और 1 जोड़ने के बजाय, ऑटोइनक्रिकमेंट कॉलम को परिभाषित करना बेहतर है। यह प्राथमिक कुंजी के लिए अच्छा है। हमने यूनिकोड तालिका उदाहरण में ऐसा किया है।

पेश है इसका एक अंश:

CREATE TABLE IF NOT EXISTS UnicodeNames
(ID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
 FullName varchar(50) NOT NULL);

इस बीच, SQL सर्वर में, हम AUTO_INCREMENT के बजाय कीवर्ड IDENTITY का उपयोग करते हैं।

चित्रा 2 एक ऑटोइनक्रिकमेंट कॉलम को परिभाषित करने के परिणाम को प्रकट करता है। पूर्णांक मान INSERT कथन में निर्दिष्ट किए बिना उत्पन्न किए गए थे।

स्तंभ मान सेट करने के लिए उपयोगकर्ता-निर्धारित चर का उपयोग करना

टी-एसक्यूएल में रिकॉर्ड डालने का एक अन्य सामान्य मामला कॉलम मान सेट करने के लिए उपयोगकर्ता द्वारा परिभाषित चर लागू करना है। यह तदर्थ स्क्रिप्ट और संग्रहीत कार्यविधियाँ बनाने में सहायक है।

लेकिन सबसे पहले, MySQL में वेरिएबल को परिभाषित करना SET का उपयोग करके किया जा सकता है। SQL सर्वर के विपरीत, आप DECLARE का उपयोग करते हैं। उदाहरण पर एक नज़र डालें:

SET @stringValue = 'string value';
SET @numericValue = 1287;
SET @booleanValue = TRUE;
SET @dateValue = CURRENT_DATE();

CREATE TABLE IF NOT EXISTS TableDataTypeValues
(ID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
 stringValue varchar(50) NOT NULL,
 numericValue int NOT NULL,
 BooleanValue bit not NULL DEFAULT FALSE,
 dateValue date NULL);

INSERT INTO TableDataTypeValues
(stringValue, numericValue, BooleanValue, dateValue)
VALUES (@stringValue, @numericValue, @booleanValue, @dateValue);

जैसा कि आप ऊपर देख सकते हैं, वैरिएबल VALUES क्लॉज में कॉलम वैल्यू को भरने के लिए एक्सप्रेशन के रूप में कार्य करते हैं।

MySQL में अस्थायी तालिका में सम्मिलित करें

यहां, हम अस्थायी तालिकाओं में MySQL INSERT का उपयोग करके समीक्षा करते हैं। T-SQL डेवलपर '# . से परिचित हैं ' एक अस्थायी तालिका नाम से पहले का प्रतीक। MySQL में, अस्थायी तालिकाएँ table_name बनाएँ का उपयोग करके अस्थायी तालिकाएँ बनाई जाती हैं . इसमें '# . नहीं है ' प्रतीक। इसलिए, आपकी स्क्रिप्ट की पंक्तियों में, एक अस्थायी तालिका नाम नियमित तालिका नामों के समान दिख सकता है:

CREATE TEMPORARY TABLE tmpkpopgroup
(ID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
 GroupName varchar(50) NOT NULL,
 ModifiedDate datetime DEFAULT CURRENT_TIMESTAMP());

INSERT INTO tmpkpopgroup
(GroupName)
VALUES ('BTS'),('SEVENTEEN'),('TWICE'),('MOMOLAND'),('GIRLS GENERATION'),('BLACKPINK'),('OH MY GIRL'),('RED VELVET');

SELECT * FROM tmpkpopgroup
ORDER BY GroupName;

दूसरे शब्दों में, अस्थायी तालिकाओं में रिकॉर्ड सम्मिलित करना नियमित तालिकाओं जैसा ही दिखता है।

ये रहा परिणाम:

MySQL INSERT… DUPLICATE KEY UPDATE पर – T-SQL में असमर्थित सिंटैक्स

अंत में, MySQL INSERT के सिंटैक्स मामले T-SQL में असमर्थित हैं। उनमें से एक है INSERT… DUPLICATE KEY UPDATE पर। यह क्या कर सकता है?

जब किसी तालिका में एक अद्वितीय कुंजी होती है और आप एक ऐसा मान सम्मिलित करते हैं जो डुप्लिकेट का कारण बनेगा, तो INSERT विफल हो जाएगा। हालाँकि, जब आप INSERT…ON DUPLICATE KEY UPDATE का उपयोग करते हैं, तो इसके बजाय मौजूदा पंक्ति का एक अपडेट होगा। त्रुटि नहीं होगी।

मान लें कि हमारे पास ये रिकॉर्ड लोगों . में हैं तालिका:

लाल रंग में बॉक्स किए गए शिप रजिस्ट्री के मूल्य और उस पूरी लाइन पर ध्यान दें। बात यह है कि, हम उसी रिकॉर्ड को ON DUPLICATE KEY UPDATE के साथ सम्मिलित करने जा रहे हैं।

अब, नीचे दिए गए कथन को सक्रिय करें:

INSERT INTO testdatabase.people
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`, `ModifiedDate`)
VALUES (5, 'Sisko','Benjamin','','Captain','USS Defiant','NCC-75633', DEFAULT)
ON DUPLICATE KEY UPDATE ShipRegistry = 'NCC-75633';

SELECT * FROM testdatabase.people;

क्या कोई त्रुटि है? आइए इसे जांचें!

बढ़िया, है ना?

जब आप ऐसा करते हैं तो वही प्रभाव होता है:

UPDATE people 
SET ShipRegistry = 'NCC-75633'
WHERE ID = 5

इस बीच, आप इस तरह टी-एसक्यूएल में इरादा व्यक्त कर सकते हैं:

IF EXISTS(SELECT id FROM people WHERE id = 5)
	UPDATE people 
	SET ShipRegistry = 'NCC-75633'
	WHERE ID = 5
ELSE
	INSERT INTO people
	(ID, LastName, FirstName, MiddleName, [Rank], Ship, ShipRegistry, ModifiedDate)
	VALUES (5, 'Sisko','Benjamin','','Captain','USS Defiant','NCC-75633', DEFAULT);

वही परिणाम होगा।

निष्कर्ष

बेंजामिन फ्रैंकलिन ने एक बार कहा था, "ज्ञान में निवेश हमेशा सर्वोत्तम ब्याज देता है।" मुझे आशा है कि यह लेख आपके लिए समय पर भुगतान करेगा।

आइए एक संक्षिप्त विवरण लें:

  1. बेसिक MySQL INSERT सिंटैक्स टी-एसक्यूएल में लगभग समान है, स्कीमा नाम की अनुपस्थिति और बैकटिक्स के उपयोग को छोड़कर।
  2. MySQL में किसी अन्य तालिका से रिकॉर्ड सम्मिलित करना लगभग T-SQL जैसा ही है।
  3. MySQL INSERT में कॉलम वैल्यू को अलग तरह से हैंडल किया जाता है। यूनिकोड मान सबसे उल्लेखनीय हैं। साथ ही, AUTO_INCREMENT के उपयोग में सिंटैक्स अलग है।
  4. MySQL में एक अस्थायी तालिका में रिकॉर्ड डालने से टी-एसक्यूएल में '# के साथ मामूली अंतर होता है प्रतीक।
  5. INSERT...ऑन डुप्लीकेट कुंजी अपडेट डुप्लिकेट त्रुटियों से बचने के लिए सिंटैक्स को छोटा करने पर अच्छा लगता है।

मुझे उम्मीद है कि जब आप 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. MySQL बनाम पीडीओ

  5. जावा:MySQL में रेडीस्टेडमेंट के साथ कई पंक्तियाँ डालें