कई डेवलपर और डेटाबेस व्यवस्थापक SQL सर्वर प्रबंधन स्टूडियो (SSMS), Azure डेटा स्टूडियो, आदि जैसे GUI टूल का उपयोग करके डेटाबेस बनाते हैं।
लेकिन SQL का उपयोग करके डेटाबेस बनाना बहुत तेज हो सकता है। यह विशेष रूप से सच है यदि आपके पास विभिन्न वातावरण हैं जिन पर आपको उसी डेटाबेस को फिर से बनाने की आवश्यकता है। आप प्रत्येक परिवेश के विरुद्ध समान स्क्रिप्ट चला सकते हैं, और डेटाबेस हर बार सेकंड के भीतर बनाया जाएगा।
SQL सर्वर में, हम इसे T-SQL के साथ करते हैं। T-SQL का अर्थ Transact-SQL है, और यह SQL सर्वर का SQL का विस्तार है।
नीचे SQL सर्वर में डेटाबेस बनाने के लिए T-SQL का उपयोग करने का एक उदाहरण दिया गया है।
मूल कोड
CREATE DATABASE Music;
डेटाबेस बनाने के लिए आपको यह सब कोड चाहिए। इस मामले में, यह संगीत . नामक एक डेटाबेस बनाता है ।
हालाँकि, यह सब बनाता है। डेटाबेस में कोई टेबल या अन्य ऑब्जेक्ट नहीं हैं। ऐसा करने के लिए, आपको आवश्यकतानुसार उन वस्तुओं को बनाने के लिए आगे के कथनों का उपयोग करना चाहिए।
साथ ही, उपरोक्त CREATE DATABASE
कथन सबसे बुनियादी सिंटैक्स का उपयोग करता है जिसमें कोई तर्क शामिल नहीं है। ऐसे कई विकल्प हैं जिन्हें इस कथन के साथ शामिल किया जा सकता है।
उदाहरण के लिए, आप फ़ाइलों और उनके फ़ाइल समूहों के लिए अपना खुद का नाम निर्दिष्ट कर सकते हैं। आप एक डेटाबेस स्नैपशॉट भी बना सकते हैं, या किसी अन्य डेटाबेस की अलग की गई फ़ाइलों से डेटाबेस बनाने के लिए डेटाबेस फ़ाइलें संलग्न कर सकते हैं।
इस कथन के पूर्ण सिंटैक्स के लिए Microsoft दस्तावेज़ देखें।
टेबल बनाएं
ऊपर दिए गए डेटाबेस के लिए तीन टेबल बनाने का एक उदाहरण यहां दिया गया है।
USE Music;
CREATE TABLE Artists (
ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
ArtistName nvarchar(255) NOT NULL,
ActiveFrom date
);
CREATE TABLE Genres (
GenreId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Genre nvarchar(50) NOT NULL
);
CREATE TABLE Albums (
AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
AlbumName nvarchar(255) NOT NULL,
ReleaseDate date NOT NULL,
ArtistId int NOT NULL,
GenreId int NOT NULL
CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)
REFERENCES dbo.Artists (ArtistId)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
पहला कदम सही डेटाबेस (इस मामले में, संगीत डेटाबेस) पर स्विच करना है। ऐसा करने के लिए, हम USE MUSIC
. का उपयोग करते हैं ।
एक बार जब आप सही डेटाबेस का उपयोग कर लेते हैं, तो आप अपनी टेबल और अन्य ऑब्जेक्ट बना सकते हैं। इस मामले में मैंने तीन टेबल बनाए। हर बार जब मैं CREATE TABLE
. का उपयोग करता हूं , उसके बाद तालिका का नाम जिसे मैं बनाना चाहता हूं। इसके बाद उस तालिका की परिभाषा आती है।
परिभाषा में तालिका के कॉलम और उनकी परिभाषाएं शामिल हैं। उदाहरण के लिए, ArtistId
एक कॉलम है, यह एक int . का उपयोग करता है डेटा प्रकार, और मैंने इसे तालिका के लिए प्राथमिक कुंजी के रूप में सेट किया है। प्राथमिक कुंजी होने का अर्थ है कि यह विशिष्ट रूप से डेटाबेस में प्रत्येक पंक्ति की पहचान करता है।
मैंने इस कॉलम को IDENTITY
. के रूप में भी सेट किया है कॉलम, जिसका अर्थ है कि प्रत्येक पंक्ति स्वचालित रूप से जेनरेट किए गए मान का उपयोग करेगी जो प्रत्येक पंक्ति के साथ वृद्धि करती है। इस मामले में यह 1 से शुरू होगा और 1 से बढ़ेगा (ऐसा इसलिए है क्योंकि मैंने IDENTITY(1,1)
निर्दिष्ट किया है ।
अंत में, मैंने इस कॉलम को NOT NULL
. पर भी सेट कर दिया है . इसका मतलब है कि इसमें एक मान होना चाहिए। यह शून्य नहीं हो सकता। स्तंभ को प्राथमिक कुंजी के रूप में सेट करने से पहले यह वास्तव में एक आवश्यकता है, लेकिन आप अन्य स्तंभों को NOT NULL
पर भी सेट कर सकते हैं आवश्यकतानुसार (जो मैंने इस उदाहरण में किया है)।
संबंध बनाएं
उपरोक्त उदाहरण में, मैंने Albums
. के बीच संबंध बनाया है और Artists
टेबल।
संबंध संबंधित डेटा वाली तालिकाओं के बीच एक प्रकार की कड़ी है। संबंध डेटा अखंडता को लागू करने में मदद करते हैं, क्योंकि वे आपको यह निर्दिष्ट करने की अनुमति देते हैं कि एक कॉलम में केवल वे मान हो सकते हैं जो किसी अन्य तालिका में किसी विशिष्ट कॉलम के मानों से मेल खाते हैं।
यहाँ उपरोक्त उदाहरण से कोड का विशिष्ट खंड है जो संबंध बनाता है:
CREATE TABLE Albums (
AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
AlbumName nvarchar(255) NOT NULL,
ReleaseDate date NOT NULL,
ArtistId int NOT NULL,
GenreId int NOT NULL
CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)
REFERENCES dbo.Artists (ArtistId)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
मैंने उसी समय संबंध बनाया जब मैंने Albums
. बनाया टेबल। मैं ऐसा करने में सक्षम था क्योंकि मैंने पहले ही Artists
बना लिया था तालिका (जो रिश्ते में दूसरी तालिका है)।
मैंने एक विदेशी कुंजी बाधा बनाकर संबंध बनाया (CONSTRAINT
. का उपयोग करके) तर्क), और FOREIGN KEY
निर्दिष्ट करना रिश्ते के विवरण के साथ। REFERENCES
कीवर्ड निर्दिष्ट करता है कि कौन-सी तालिका और स्तंभ विदेशी कुंजी का संदर्भ देता है।
मैंने रिश्ते का नाम FK_Albums_Artists
. रखा है ।
ON DELETE
और ON UPDATE
भाग वैकल्पिक हैं। वे निर्दिष्ट करते हैं कि उस स्थिति में क्या करना है जब कोई पैरेंट/प्राथमिक कुंजी कॉलम से किसी पंक्ति को हटा देता है या अपडेट कर देता है। डिफ़ॉल्ट मान NO ACTION
है , जिसका अर्थ है कि डेटाबेस इंजन एक त्रुटि उत्पन्न करता है, और मूल तालिका में पंक्ति पर अद्यतन क्रिया वापस ले ली जाती है।
SQL में संबंध कैसे बनाएं पर मेरा लेख उन अन्य विकल्पों को सूचीबद्ध करता है जो आप यहां प्रदान कर सकते हैं, साथ ही साथ प्रत्येक विकल्प क्या करता है।
बाद में संबंध बनाएं
आप किसी मौजूदा टेबल पर भी संबंध बना सकते हैं।
T-SQL का उपयोग करके ऐसा करने के लिए, ALTER TABLE
. का उपयोग करें बयान।
इसलिए मैं पिछले कोड को चलाने के बाद निम्नलिखित कोड चला सकता हूं।
ALTER TABLE Albums
ADD CONSTRAINT FK_Albums_Genres FOREIGN KEY (GenreId)
REFERENCES dbo.Genres (GenreId)
ON DELETE NO ACTION
ON UPDATE NO ACTION
;
यह एक और संबंध बनाता है, इस बार Albums
. के बीच और Genres
टेबल।
आप देख सकते हैं कि यह कोड पिछले संबंध की तरह ही बहुत कुछ करता है। फर्क सिर्फ इतना है कि रिश्ता Artists
. के बीच का होता है और Genres
Albums
. के बजाय और Artists
।
इस मामले में मैंने रिश्ते का नाम FK_Albums_Genres
. रखा है ।
डेटा डालें
उपरोक्त कोड ने एक डेटाबेस बनाया है जो डेटा के लिए उपयुक्त है। अब हम डेटा जोड़ सकते हैं।
SQL सर्वर में, आप INSERT
. का उपयोग करके डेटाबेस में डेटा जोड़ सकते हैं बयान। इस कथन का उपयोग करते समय, आपको तालिका का नाम, साथ ही उन स्तंभों को भी प्रदान करना होगा जिनमें आप डेटा सम्मिलित करना चाहते हैं।
वास्तव में, यदि आप सभी स्तंभों में डेटा सम्मिलित कर रहे हैं तो कॉलम प्रदान करना वैकल्पिक है, लेकिन स्पष्टता के लिए, यहां एक उदाहरण दिया गया है जिसमें कॉलम नाम शामिल हैं।
INSERT INTO Artists (ArtistName, ActiveFrom)
VALUES
('Iron Maiden','1975-12-25'),
('AC/DC','1973-01-11'),
('Allan Holdsworth','1969-01-01'),
('Buddy Rich','1919-01-01'),
('Devin Townsend','1993-01-01'),
('Jim Reeves','1948-01-01'),
('Tom Jones','1963-01-01'),
('Maroon 5','1994-01-01'),
('The Script','2001-01-01'),
('Lit','1988-06-26'),
('Black Sabbath','1968-01-01'),
('Michael Learns to Rock','1988-03-15'),
('Carabao','1981-01-01'),
('Karnivool','1997-01-01'),
('Birds of Tokyo','2004-01-01'),
('Bodyjar','1990-01-01');
INSERT INTO Genres (Genre)
VALUES
('Rock'),
('Jazz'),
('Country'),
('Pop'),
('Blues'),
('Hip Hop'),
('Rap'),
('Punk');
INSERT INTO Albums (AlbumName, ReleaseDate, ArtistId, GenreId)
VALUES
('Powerslave', '1984-09-03', 1, 1),
('Powerage', '1978-05-05', 2, 1),
('Singing Down the Lane', '1956-01-01', 6, 3),
('Ziltoid the Omniscient', '2007-05-21', 5, 1),
('Casualties of Cool', '2014-05-14', 5, 1),
('Epicloud', '2012-09-18', 5, 1),
('Somewhere in Time', '1986-09-29', 1, 1),
('Piece of Mind', '1983-05-16', 1, 1),
('Killers', '1981-02-02', 1, 1),
('No Prayer for the Dying', '1990-10-01', 1, 1),
('No Sound Without Silence', '2014-09-12', 9, 4),
('Big Swing Face', '1967-06-01', 4, 2),
('Blue Night', '2000-11-01', 12, 4),
('Eternity', '2008-10-27', 12, 4),
('Scandinavia', '2012-06-11', 12, 4),
('Long Lost Suitcase', '2015-10-09', 7, 4),
('Praise and Blame', '2010-06-26', 7, 4),
('Along Came Jones', '1965-05-21', 7, 4),
('All Night Wrong', '2002-05-05', 3, 2),
('The Sixteen Men of Tain', '2000-03-20', 3, 2);
जैसा कि आप देख सकते हैं, प्रत्येक पंक्ति की अपनी रेखा होती है। हम बस एक पंक्ति प्रति पंक्ति जोड़ते हैं जिसमें प्रत्येक स्तंभ अल्पविराम से अलग होता है और कोष्ठक से घिरा होता है। अल्पविराम भी प्रत्येक पंक्ति को अलग करता है (कोष्ठक के बाद)।
हमारे नए बनाए गए डेटाबेस के विरुद्ध उपरोक्त कोड को चलाने से निम्न आउटपुट प्राप्त होते हैं:
(16 rows affected) (8 rows affected) (20 rows affected)
यह हमें बताता है कि डेटा सफलतापूर्वक डाला गया था।
डेटाबेस की जांच करें
हम यह सत्यापित करने के लिए डेटाबेस के खिलाफ एक त्वरित परीक्षण चला सकते हैं कि इसे बनाया गया था और हमारा डेटा डाला गया था।
उदाहरण के लिए, हम निम्नलिखित सरल क्वेरी चला सकते हैं।
SELECT * FROM Artists;
परिणाम:
+------------+------------------------+--------------+ | ArtistId | ArtistName | ActiveFrom | |------------+------------------------+--------------| | 1 | Iron Maiden | 1975-12-25 | | 2 | AC/DC | 1973-01-11 | | 3 | Allan Holdsworth | 1969-01-01 | | 4 | Buddy Rich | 1919-01-01 | | 5 | Devin Townsend | 1993-01-01 | | 6 | Jim Reeves | 1948-01-01 | | 7 | Tom Jones | 1963-01-01 | | 8 | Maroon 5 | 1994-01-01 | | 9 | The Script | 2001-01-01 | | 10 | Lit | 1988-06-26 | | 11 | Black Sabbath | 1968-01-01 | | 12 | Michael Learns to Rock | 1988-03-15 | | 13 | Carabao | 1981-01-01 | | 14 | Karnivool | 1997-01-01 | | 15 | Birds of Tokyo | 2004-01-01 | | 16 | Bodyjar | 1990-01-01 | +------------+------------------------+--------------+
और एक और क्वेरी चलाते हैं जो तीनों तालिकाओं के डेटा का उपयोग करती है।
SELECT
ArtistName,
AlbumName,
ReleaseDate
FROM Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId
INNER JOIN Genres g
ON al.GenreId = g.GenreId
WHERE g.Genre = 'Rock';
परिणाम:
+----------------+-------------------------+---------------+ | ArtistName | AlbumName | ReleaseDate | |----------------+-------------------------+---------------| | Iron Maiden | Powerslave | 1984-09-03 | | AC/DC | Powerage | 1978-05-05 | | Devin Townsend | Ziltoid the Omniscient | 2007-05-21 | | Devin Townsend | Casualties of Cool | 2014-05-14 | | Devin Townsend | Epicloud | 2012-09-18 | | Iron Maiden | Somewhere in Time | 1986-09-29 | | Iron Maiden | Piece of Mind | 1983-05-16 | | Iron Maiden | Killers | 1981-02-02 | | Iron Maiden | No Prayer for the Dying | 1990-10-01 | +----------------+-------------------------+---------------+
यह क्वेरी संबंधित डेटा के साथ तालिकाओं के बीच संबंध बनाने के महत्व को प्रदर्शित करती है। जब हम इस तरह की क्वेरीज़ चलाते हैं, तो हमें वास्तव में डेटा को तालिकाओं के बीच सुसंगत होने की आवश्यकता होती है।
डेटाबेस अब उपयोग के लिए तैयार है। हम इसके खिलाफ क्वेरी चला सकते हैं। हम अधिक डेटा सम्मिलित कर सकते हैं। हम और अधिक तालिकाएँ, संबंध, विचार, संग्रहीत कार्यविधियाँ, उपयोगकर्ता-परिभाषित कार्य, और बहुत कुछ जोड़ सकते हैं।