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

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

क्या आप एक टी-एसक्यूएल डेवलपर हैं जो MySQL की मूल बातें सीख रहे हैं? फिर, आप जिन चीजों को सीखना चाहते हैं उनमें से एक है MySQL CREATE TABLE स्टेटमेंट। इसके अलावा, एक नया SQL डेटाबेस प्लेटफ़ॉर्म सीखने का सबसे तेज़ तरीका इसकी सामान्य कार्यक्षमता और सिंटैक्स की तुलना करना है।

यही हम आज करने जा रहे हैं। लेकिन पूरा वाक्य-विन्यास बहुत है। इसलिए, हम आपको MySQL CREATE TABLE कमांड के साथ उठने और चलाने के लिए केवल 5 बुनियादी बिंदुओं को कवर करेंगे।

हालांकि, आगे बढ़ने से पहले, आइए कुछ बिंदुओं को स्पष्ट करें:

  1. यहां इस्तेमाल किया गया MySQL संस्करण MySQL 8 है जो InnoDB स्टोरेज इंजन का उपयोग करता है।
  2. यहां इस्तेमाल किया गया SQL सर्वर संस्करण SQL Server 2019 है।

बढ़िया है? आइए शुरू करते हैं।

MySQL और T-SQL में टेबल स्टेटमेंट बनाएं

आइए तालिका के नाम को परिभाषित करके तुलना शुरू करें।

MySQL CREATE TABLE में ध्यान देने योग्य सिंटैक्स अंतरों में से एक स्कीमा नाम का अभाव है। यहां बताया गया है कि यह कैसे होता है:

CREATE TABLE database_name.table_name

क्या आपने डेटाबेस नाम से पहले तालिका का नाम देखा था? अब, यहां एक टी-एसक्यूएल समकक्ष प्रारूप है जिससे आप परिचित हैं:


CREATE TABLE database_name.schema_name.table_name

क्यों? क्योंकि MySQL में, एक स्कीमा डेटाबेस का पर्याय है। डेटाबेस और स्कीमा नाम वैकल्पिक हैं। हालाँकि, यदि आपको उसी स्क्रिप्ट में किसी अन्य डेटाबेस में एक तालिका बनाने की आवश्यकता है, तो यह आवश्यक है।

ये सही है। तालिका और स्तंभ नामों में वर्गाकार कोष्ठकों का उपयोग करने से MySQL में त्रुटि उत्पन्न होगी। इसके बजाय आपको पहचानकर्ताओं को संलग्न करने के लिए बैकटिक्स की एक जोड़ी का उपयोग करना चाहिए। चित्र 1 दिखाता है कि आप इसे यूएस कीबोर्ड लेआउट पर कहां पाते हैं:

अब, नमूना देखें:

-- MySQL CREATE TABLE

CREATE TABLE `testdatabase`.`person` (
  `BusinessEntityID` INT NOT NULL,
  `PersonType` NCHAR(2) NOT NULL,
  `Title` VARCHAR(8) NULL,
  `FirstName` NVARCHAR(50) NOT NULL,
  `MiddleName` VARCHAR(50) NULL,
  `LastName` VARCHAR(50) NOT NULL,
  `Suffix` NVARCHAR(10) NULL,
  `EmailPromotion` INT NOT NULL,
  `ModifiedDate` DATETIME NOT NULL DEFAULT NOW(),
  PRIMARY KEY (`BusinessEntityID`));

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

नीचे टी-एसक्यूएल में समतुल्य कोड की जाँच करें:

-- T-SQL CREATE TABLE
CREATE TABLE [testdatabase].[dbo].[Person](
	[BusinessEntityID] [int] NOT NULL,
	[PersonType] [nchar](2) NOT NULL,
	[Title] [nvarchar](8) NULL,
	[FirstName] [nvarchar](50) NOT NULL,
	[MiddleName] [nvarchar](50) NULL,
	[LastName] [nvarchar](50) NOT NULL,
	[Suffix] [nvarchar](10) NULL,
	[EmailPromotion] [int] NOT NULL,
	[ModifiedDate] [datetime] NOT NULL DEFAULT GETDATE(),
 CONSTRAINT [PK_Person_BusinessEntityID] PRIMARY KEY  
  (
	[BusinessEntityID] ASC
  )
) ON [PRIMARY]

बेशक, आपको इन पहचानकर्ताओं को संलग्न करने की आवश्यकता नहीं है। लेकिन यदि आप टेबल या कॉलम नामों में आरक्षित शब्दों या स्थान का उपयोग करते हैं, तो एक त्रुटि होगी।

कैसे करें अस्थायी तालिका बनाएं

अस्थायी तालिकाओं के शौकीन? फिर MySQL आपको अस्थायी तालिका को परिभाषित करने के लिए और टाइप करने देगा। नमूना देखें:

-- MySQL Temporary Table

CREATE TEMPORARY TABLE `MyTempTable`

इस बीच, टी-एसक्यूएल कोडर्स का उपयोग # . के लिए किया जाता है तालिका नाम से पहले प्रतीक। ऊपर से समकक्ष कोड देखें:


-- T-SQL Temporary Table

CREATE TABLE #MyTempTable

हमने तालिका परिभाषाओं और नामों के साथ काम किया है। आइए कॉलम परिभाषाओं के साथ आगे बढ़ें।

MySQL कॉलम सिंटैक्स

आपके पास स्तंभों के बिना एक मूल SQL तालिका नहीं हो सकती है। तो, MySQL और SQL सर्वर में क्या समानताएँ और अंतर हैं?

कॉलम नाम और डेटा प्रकार

आप बैकटिक्स के बारे में पहले से ही जानते हैं। कॉलम नाम और डेटा प्रकारों के बारे में कुछ और बुनियादी MySQL और T-SQL में समान है। नीचे दिया गया नमूना देखें:

CREATE TABLE `testdatabase`.`people`
(
    `ID` INT,
    `LastName` VARCHAR(50),
    ...
);

हालांकि, और भी बहुत कुछ है।

स्तंभ की अशक्तता

कॉलम अशक्त हो सकते हैं या नहीं। आप कॉलम परिभाषा में NULL या NOT NULL जोड़कर ऐसा कर सकते हैं।

आइए हमारे पिछले उदाहरण पर विस्तार करें।

CREATE TABLE `testdatabase`.`people`
(
     `ID` INT NOT NULL,
     `LastName` VARCHAR(50) NOT NULL,
     `FirstName` VARCHAR(50) NOT NULL,
     `MiddleName` VARCHAR(50) NULL,
     ...
);

यह काफी हद तक टी-एसक्यूएल जैसा ही है। डिफ़ॉल्ट मानों के बारे में क्या?

स्तंभ डिफ़ॉल्ट मान

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

CREATE TABLE `testdatabase`.`people`
(
     `ID` INT NOT NULL,
     `LastName` VARCHAR(50) NOT NULL,
     `FirstName` VARCHAR(50) NOT NULL,
     `MiddleName` VARCHAR(50) NULL,
     `ModifiedDate` DATETIME NOT NULL DEFAULT NOW(),
     ...
);

संशोधित दिनांक वर्तमान सिस्टम दिनांक और समय के लिए कॉलम डिफॉल्ट करता है। यदि आप नीचे दी गई तालिका की तरह एक INSERT करते हैं, तो ModifiedDate के लिए हमेशा एक मान होगा ।

INSERT INTO testdatabase.people
(ID, LastName, FirstName, MiddleName)
VALUES
(1,'Kirk','James','Tiberius');

यह INSERT के बाद अपेक्षा के अनुरूप काम करता है। यहाँ MySQL के लिए dbForge Studio का एक स्क्रीनशॉट है:

MySQL प्राथमिक, विदेशी और अद्वितीय कुंजी के साथ तालिका बनाएं

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

एक T-SQL डेवलपर को MySQL की प्राथमिक कुंजियों, विदेशी कुंजियों और अद्वितीय कुंजियों के साथ घर जैसा महसूस करना चाहिए।

प्राथमिक कुंजी

आप एक या अधिक कॉलम को प्राथमिक कुंजी के रूप में परिभाषित कर सकते हैं। सिंटैक्स लगभग 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,
     `ModifiedDate` DATETIME NOT NULL DEFAULT NOW()
);

आसान है, है ना?

लेकिन क्या होगा यदि आपको एकाधिक कॉलम चाहिए? टी-एसक्यूएल की तरह, आपके पास 2 विकल्प हैं। नीचे दिए गए उदाहरण देखें:

-- OPTION 1: Let MySQL generate the constraint name

CREATE TABLE `testdatabase`.`people`
(
     `ID` INT NOT NULL,
     `LastName` VARCHAR(50) NOT NULL,
     `FirstName` VARCHAR(50) NOT NULL,
     `MiddleName` VARCHAR(50) NOT NULL DEFAULT '',
     `ModifiedDate` DATETIME NOT NULL DEFAULT NOW(),
     PRIMARY KEY (`LastName`,`FirstName`,`MiddleName`)
);

-- OPTION 2: Specify your constraint name

CREATE TABLE `testdatabase`.`people`
(
     `ID` INT NOT NULL,
     `LastName` VARCHAR(50) NOT NULL,
     `FirstName` VARCHAR(50) NOT NULL,
     `MiddleName` VARCHAR(50) NOT NULL DEFAULT '',
     `ModifiedDate` DATETIME NOT NULL DEFAULT NOW(),
    CONSTRAINT `pk_name` PRIMARY KEY (`LastName`, `FirstName`, `MiddleName`)
);

प्राथमिक कुंजियों के लिए बस इतना ही।

विदेशी कुंजी

एक अन्य महत्वपूर्ण बाधा विदेशी कुंजी है। इसका उपयोग किसी तालिका को दूसरी तालिका में क्रॉस-रेफ़रेंस करने के लिए किया जाता है:

CREATE TABLE `testdatabase`.`address`
(
    `ID` int NOT NULL PRIMARY KEY,
    `parent_id` int NOT NULL,
    `full_address` varchar(100) NOT NULL,
    CONSTRAINT `FK_address_parent_id` FOREIGN KEY (`parent_id`)
    REFERENCES `people` (`ID`)
);

क्या आपने टी-एसक्यूएल के साथ समानता देखी?

अद्वितीय कुंजी

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

CREATE TABLE `testdatabase`.`people`
(
     `ID` INT NOT NULL,
     `LastName` VARCHAR(50) NOT NULL,
     `FirstName` VARCHAR(50) NOT NULL,
     `MiddleName` VARCHAR(50) NOT NULL DEFAULT '',
     `ModifiedDate` DATETIME NOT NULL DEFAULT NOW(),
    CONSTRAINT `PK_people_id` PRIMARY KEY (`ID`),
    CONSTRAINT `IDX_name` UNIQUE KEY (`LastName`,`FirstName`,`MiddleName`)

);

उपरोक्त कोड यह सुनिश्चित करेगा कि तालिका में केवल अद्वितीय नाम जोड़े जाएंगे।

तालिका अनुक्रमणिका उदाहरण बनाएं (संकुलित और गैर-संकुल)

पिछले उदाहरणों में, आपने प्राथमिक और द्वितीयक कुंजियाँ बनाई हुई देखी हैं। लेकिन क्लस्टर्ड और गैर-क्लस्टर इंडेक्स कहां हैं? यह ध्यान देने योग्य है क्योंकि SQL सर्वर में आप क्लस्टर इंडेक्स बनाने के लिए स्पष्ट रूप से CLUSTERED कीवर्ड निर्दिष्ट करते हैं।

दिलचस्प बात यह है कि MySQL में CLUSTERED या NONCLUSTERED कीवर्ड नहीं हैं। आप संकुल अनुक्रमणिका कैसे बनाते हैं?

सरल। बस कॉलम को प्राथमिक कुंजी के रूप में निर्दिष्ट करें, और InnoDB स्टोरेज इंजन इसे एक क्लस्टर इंडेक्स बना देगा। नीचे दिए गए उदाहरण में, आईडी प्राथमिक कुंजी और संकुल अनुक्रमणिका है।

CREATE TABLE `testdatabase`.`people`
(
     `ID` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
     `LastName` VARCHAR(50) NOT NULL,
     `FirstName` VARCHAR(50) NOT NULL,
     `MiddleName` VARCHAR(50) NOT NULL DEFAULT '',
     `ModifiedDate` DATETIME NOT NULL DEFAULT NOW(),
    CONSTRAINT `IDX_name` UNIQUE KEY (`LastName`,`FirstName`,`MiddleName`)
);

यदि आप प्राथमिक कुंजी निर्दिष्ट नहीं करते हैं, तो किसी भी अद्वितीय अनुक्रमणिका को संकुल अनुक्रमणिका के रूप में उपयोग किया जाएगा।

फिर से, यदि आपके पास प्राथमिक कुंजी और अद्वितीय अनुक्रमणिका नहीं है, तो InnoDB एक छिपी हुई क्लस्टर अनुक्रमणिका बनाता है। सबूत यहां देखें।

अगला प्रश्न है, गैर-संकुल अनुक्रमणिका के बारे में क्या?

यदि आपके पास पहले से ही प्राथमिक कुंजी क्लस्टर्ड इंडेक्स के रूप में है, तो कोई भी अन्य इंडेक्स गैर-क्लस्टर या सेकेंडरी होगा। इसके अलावा, आपके पास केवल एक संकुल अनुक्रमणिका हो सकती है।

अगला खंड T-SQL में नहीं मिला MySQL CREATE TABLE के लिए एक अद्वितीय सिंटैक्स पर चर्चा करेगा।

MySQL टेबल क्लोनिंग और कॉपी सिंटेक्स

आइए टेबल क्लोनिंग पर चर्चा करें। हम इसे MySQL क्रिएट टेबल में कर सकते हैं। फिर, हम टी-एसक्यूएल समकक्ष दिखाएंगे।

नीचे दिया गया उदाहरण क्रिएट टेबल का उपयोग करके पहली टेबल के समान संरचना के साथ टेबल बनाता है…LIKE।

CREATE TABLE `people2` LIKE `people`

हमने अभी-अभी लोगों . का क्लोन बनाया है people2 . में तालिका . हालांकि, यह केवल लोगों . की संरचना है तालिका जिसे कॉपी किया गया है, डेटा नहीं। इसने मूल तालिका की प्रमुख बाधाओं और अनुक्रमितों की भी नकल की। यदि आप मुझसे पूछें तो काफी आसान है।

निकटतम टी-एसक्यूएल समकक्ष यह है:

-- T-SQL way of cloning a table. The indexes & key constraints are not included, 
-- though

SELECT * INTO people2
FROM people
WHERE 1=0     -- this will cause the SELECT to return an empty result set.

लेकिन क्या होगा अगर आप डेटा चाहते हैं? फिर, टेबल बनाएं...चुनें जवाब है:

CREATE TABLE `people3` AS
SELECT * FROM `people`;

लोगों . में जो भी डेटा है तालिका, इसे people3 . में कॉपी कर दिया जाएगा टेबल। हालांकि, इस कमांड में इंडेक्स और बाधाएं शामिल नहीं होंगी।

अब, निकटतम T-SQL समकक्ष यह है:

-- T-SQL table copying

SELECT * INTO people3 
FROM people

निष्कर्ष

मुझे आशा है कि उपरोक्त बिंदु आपको SQL सर्वर T-SQL डेवलपर के दृष्टिकोण से MySQL CREATE TABLE का उपयोग करने और चलाने के लिए प्रेरित कर सकते हैं।

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

अगर आपको यह लेख पसंद आया हो, तो बेझिझक इसे अपने पसंदीदा सोशल मीडिया पर शेयर करें।

सभी को हैप्पी कोडिंग।


  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 संग्रहीत प्रक्रिया में डायनामिक SQL कैसे प्राप्त करें

  5. MySQL:@variable बनाम चर। क्या फर्क पड़ता है?