SQL Server में फॉरेन की SET NULL ऑन डिलीट के साथ
निम्नलिखित ट्यूटोरियल SQL Server में फॉरेन की के SET NULL ऑन डिलीट कंस्ट्रेंट को समझाएगा।
SQL Server में डिलीट पर SET NULL के साथ फॉरेन की क्या है?
फॉरेन कीज़ जो डिलीट पर NULL सेट करने के लिए बाध्य हैं, का अर्थ है कि जब पैरेंट टेबल में एक रिकॉर्ड हटाया जाता है, तो फॉरेन की मान फ़ील्ड में चाइल्ड टेबल में संबंधित रिकॉर्ड को NULL पर सेट कर दिया जाएगा। चाइल्ड टेबल में लिखी गई टेबल को SQL Server से नहीं हटाया जाएगा।
डिलीट होने पर NULL मान की शर्त वाली फॉरेन कीज़ को CREATE TABLE या ALTER TABLE स्टेटमेंट के साथ बनाया जा सकता है।
CREATE TABLE स्टेटमेंट के साथ डिलीट होने पर NULL मान सेट करने के कंस्ट्रेंट के साथ फॉरेन की बनाएं
सिंटैक्स
CREATE TABLE bang_con
(
cot1 kieudulieu [ NULL | NOT NULL ],
cot2 kieudulieu [ NULL | NOT NULL ],
…
CONSTRAINT fk_ten
FOREIGN KEY (cot_con1, cot_con2, … cot_con_n)
REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n)
ON DELETE SET NULL
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);
bang_con
बनाने के लिए चाइल्ड टेबल का नाम।
cot1, cot2
टेबल में बनाने के लिए कॉलम। प्रत्येक कॉलम का 1 डेटा प्रकार होता है, NULL या NOT NULL मान समाहित करने के लिए निर्दिष्ट किया जाना चाहिए, अन्यथा डिफ़ॉल्ट NULL है।
SQL Server में डेटा प्रकार
fk_ten
बनाने के लिए फॉरेन की कंस्ट्रेंट का नाम।
cot_con1, cot_con2, ... cot_con_n
bang_con में वह कॉलम जो bang_me में प्राइमरी की को संदर्भित करना चाहता है।
bang_me
पैरेंट टेबल का नाम जिसमें bang_con में उपयोग की जाने वाली प्राइमरी की होती है।
cot_me1, cot_me2, ... cot_me_n
bang_me में प्राइमरी की बनाने वाला कॉलम। फॉरेन कीज़ bang_con में cot_con1, cot_con2, ... cot_con_n कॉलम्स और डेटा के बीच कंस्ट्रेंट बनाएंगी।
ON DELETE SET NULL
चाइल्ड टेबल में डेटा को NULL पर सेट किया जाएगा जब पैरेंट टेबल में डेटा हटाया जाता है। सब-डेटा हटाया नहीं जाता।
ON UPDATE
वैकल्पिक। जब पैरेंट डेटा अपडेट किया जाता है तो चाइल्ड डेटा के साथ क्या करना है दर्शाता है। विकल्प: NO ACTION, CASCADE, SET NULL, SET DEFAULT।
NO ACTION
ON DELETE या ON UPDATE के साथ उपयोग, यानी पैरेंट डेटा हटाए या अपडेट होने पर चाइल्ड डेटा के साथ कुछ न करें।
CASCADE
ON DELETE या ON UPDATE के साथ उपयोग, अर्थात चाइल्ड डेटा हटाया या अपडेट किया जाता है जब पैरेंट डेटा हटाया या अपडेट किया जाता है।
SET NULL
ON DELETE या ON UPDATE के साथ उपयोग, अर्थात चाइल्ड डेटा को NULL पर सेट किया जाता है जब पैरेंट डेटा हटाया या अपडेट किया जाता है।
SET DEFAULT
ON DELETE या ON UPDATE के साथ उपयोग, अर्थात चाइल्ड डेटा को डिफ़ॉल्ट मान पर सेट किया जाता है जब पैरेंट डेटा हटाया या अपडेट किया जाता है।
उदाहरण
CREATE TABLE sanpham
( id_sanpham INT PRIMARY KEY,
ten_sanpham VARCHAR(50) NOT NULL,
phan_loai VARCHAR(25)
);
CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);
इस उदाहरण में, हमने पैरेंट टेबल, sanpham बनाई, जिसमें सूचना फ़ील्ड id_sanpham सहित प्राइमरी की है। फिर एक चाइल्ड टेबल है जिसका नाम hangtonkho है जिसमें डिलीशन कंस्ट्रेंट के साथ फॉरेन की है। CREATE TABLE स्टेटमेंट hangtonkho टेबल पर fk_htk_id_sanpham नामक फॉरेन की बनाता है। फॉरेन की hangtonkho टेबल में id_sanpham कॉलम और sanpham टेबल में id_sanpham के बीच संबंध बनाती है।
यह फॉरेन की ON DELETE SET NULL निर्दिष्ट करती है ताकि SQL Server को बताया जा सके कि जब पैरेंट टेबल में डेटा हटाया जाता है तो चाइल्ड टेबल में संबंधित रिकॉर्ड मान को NULL पर सेट करना आवश्यक है। इस उदाहरण में, जब id_sanpham को sanpham टेबल से हटाया जाता है, तो hangtonkho टेबल में id_sanpham का उपयोग करने वाला संबंधित रिकॉर्ड NULL पर सेट हो जाएगा।
यह ध्यान रखना महत्वपूर्ण है कि चूंकि hangtonkho टेबल में id_sanpham कॉलम को NULL पर सेट किया जाएगा, यह सुनिश्चित करना आवश्यक है कि इस कॉलम को NULL मान प्राप्त करने की अनुमति है। यदि CREATE के साथ बनाते समय NOT NULL पर सेट किया जाता है, तो निम्न त्रुटि का सामना करना पड़ेगा।
CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT NOT NULL,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);
Msg 1761, Level 16, State 0, Line 1
Cannot create the foreign key 'fk_htk_id_sanpham' with the SET NULL referential action, because one or more referencing columns are not nullable.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint or index. See previous error.
सुनिश्चित करें कि आप hangtonkho टेबल में id_sanpham कॉलम को NULL मान प्राप्त करने के लिए परिभाषित करते हैं जैसा कि नीचे दिखाया गया है।
CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);
Command(s) completed successfully.
ALTER TABLE स्टेटमेंट के साथ डिलीट होने पर NULL मान सेट करने के कंस्ट्रेंट के साथ फॉरेन की बनाएं
सिंटैक्स
ALTER TABLE bang_con
ADD CONSTRAINT fk_ten
FOREIGN KEY (cot_con1, cot_con2, ... cot_con_n)
REFERENCES bang_me (cot_me1, cot_me2, ... cot_me_n)
ON DELETE SET NULL;
bang_con
बनाने के लिए चाइल्ड टेबल का नाम।
fk_ten
बनाने के लिए फॉरेन की कंस्ट्रेंट का नाम।
cot_con1, cot_con2, ... cot_con_n
bang_con में वह कॉलम जो bang_me में प्राइमरी की को संदर्भित करना चाहता है।
bang_me
पैरेंट टेबल का नाम जिसमें bang_con में उपयोग की जाने वाली प्राइमरी की होती है।
cot_me1, cot_me2, ... cot_me_n
bang_me में प्राइमरी की बनाने वाला कॉलम। फॉरेन कीज़ bang_con में cot_con1, cot_con2, ... cot_con_n कॉलम्स और डेटा के बीच कंस्ट्रेंट बनाएंगी।
ON DELETE SET NULL
निर्दिष्ट करता है कि पैरेंट टेबल में डेटा हटाए जाने पर चाइल्ड डेटा को NULL मान पर सेट किया जाएगा। चाइल्ड टेबल में डेटा हटाया नहीं जाएगा।
उदाहरण
ALTER TABLE hangtonkho
ADD CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL;
इस उदाहरण में, hangtonkho चाइल्ड टेबल को fk_htk_id_sanpham नामक फॉरेन की के साथ बनाया गया है, जो id_sanpham के आधार पर पैरेंट टेबल sanpham को संदर्भित करता है।
ON DELETE SET NULL निर्दिष्ट करना SQL Server के लिए यह समझने के लिए है कि जब पैरेंट टेबल में id_sanpham डेटा हटाया जाता है, तो hangtonkho चाइल्ड टेबल में संबंधित रिकॉर्ड को NULL मान पर सेट किया जाएगा।