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

SQL में बाधा की जाँच करें

SQL में चेक बाधा नियम या नियमों का सेट है जिसका उपयोग डेटा श्रेणी को सीमित करने के लिए किया जाता है जिसे तालिका कॉलम में दर्ज किया जा सकता है। चेक बाधा का उपयोग टेबल के साथ-साथ कॉलम पर भी किया जाता है। तो हम कह सकते हैं, कॉलम स्तर और तालिका स्तर पर चेक बाधा उत्पन्न की जा सकती है।

कॉलम पर लागू प्रतिबंध की जाँच करें, और यह कॉलम में सम्मिलित करते समय इस कॉलम के लिए कुछ मानों की अनुमति देगा। यदि आप किसी तालिका पर CHECK बाधा को परिभाषित करते हैं, तो यह पंक्ति में अन्य स्तंभों के मानों के आधार पर कुछ स्तंभों में मानों को सीमित कर सकता है। हम एक ही टेबल में कई चेक बाधाओं को लागू कर सकते हैं।

आइए चेक बाधा अवधारणा को अधिक स्पष्ट रूप से समझने के लिए कुछ उदाहरण देखें।

स्तंभ स्तर की जांच बाधा

चेक बाधा को कॉलम नाम के ठीक बाद परिभाषित किया गया है, जिसे कॉलम लेवल चेक बाधा के रूप में जाना जाता है। कॉलम लेवल चेक बाधा का सिंटैक्स निम्नानुसार है,

CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE) CHECK(COLUMN_NAME CONDITION), COLUMN_NAME3 DATATYPE(SIZE));

उदाहरण के लिए, हम एक टेबल बनाएंगे और एक टेबल में निम्न में से किसी एक कॉलम पर एक कॉलम-लेवल चेक बाधा को परिभाषित करेंगे:

CREATE TABLE EMPLOYEES (EMPLOYEEID INT PRIMARY KEY, EMPLOYEE_NAME VARCHAR(50) NOT NULL, SALARY INT CHECK(SALARY > 40000), CITY VARCHAR(20) NOT NULL, DEPARTMENT VARCHAR(30) NOT NULL);

उपरोक्त प्रश्न में, हमने कर्मचारी . नाम की एक तालिका बनाई है और कुछ स्तंभों को परिभाषित किया। कर्मचारी तालिका में, हमने वेतन . पर चेक बाधाओं को निर्दिष्ट किया है कॉलम। बाधा ही कहती है कि वेतन स्तंभ केवल उन्हीं आंकड़ों को स्वीकार करेगा जिनका कर्मचारी वेतन 40,000 से अधिक है; यदि वेतन 40,000 से कम है, तो बाधा उल्लंघन त्रुटियाँ होंगी।

क्रॉस-चेक करने के लिए कि CHECK बाधा वेतन . पर परिभाषित है कॉलम, हम नीचे दी गई क्वेरी का उपयोग करेंगे:

SHOW CREATE TABLE EMPLOYEES;

हम कर्मचारी तालिका में एक रिकॉर्ड डालेंगे जहां एक कर्मचारी का वेतन 40,000 से कम है।

INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 38000, 'Pune', 'Java');

जब हमने एक कर्मचारी रिकॉर्ड डाला जिसका वेतन 40,000 से कम है, तो बाधा विफल त्रुटि संदेश प्रदर्शित होता है; क्यों? क्योंकि हमने वेतन पर चेक प्रतिबंध लागू किया है जो केवल उन्हीं रिकॉर्डों को अनुमति देगा जिनके कर्मचारी का वेतन 40,000 से अधिक है।

हम कर्मचारी तालिका में एक रिकॉर्ड डालेंगे जहां एक कर्मचारी का वेतन 40,000 से अधिक है।

INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 45000, 'Pune', 'Java');

यह जांचने के लिए कि क्या डेटा किसी तालिका में डाला गया है, हम नीचे दी गई क्वेरी का उपयोग करेंगे:

SELECT * FROM EMPLOYEES;

एक कर्मचारी रिकॉर्ड सफलतापूर्वक तालिका में डाला गया है क्योंकि हमने कर्मचारी वेतन 40,000 से अधिक दर्ज किया है।

उदाहरण 2: हम एक टेबल बनाएंगे और एक टेबल में एक से अधिक कॉलम पर एक कॉलम-लेवल चेक बाधा को परिभाषित करेंगे।

CREATE TABLE MANAGER(MANAGERID INT PRIMARY KEY, NAME VARCHAR(40) NOT NULL, SALARY INT CHECK(SALARY>=60000), DEPARTMENT VARCHAR(20) NOT NULL CHECK(DEPARTMENT IN('Oracle', 'FMW', 'Testing', 'Java' )));

हमने उपरोक्त क्वेरी में एक टेबल नेम मैनेजर बनाया है और कुछ कॉलम को परिभाषित किया है। हमने टेबल मैनेजर में वेतन कॉलम पर चेक बाधाओं को निर्दिष्ट किया है। बाधा ही कहती है कि वेतन स्तंभ उन्हीं आंकड़ों को स्वीकार करेगा जिनका प्रबंधक वेतन 600000 से अधिक है; यदि वेतन 60000 से कम है, तो बाधा उल्लंघन त्रुटियां होंगी, और प्रबंधक का विभाग Oracle, FMW, परीक्षण और Java है।

यह जांचने के लिए कि वेतन कॉलम और विभाग कॉलम पर CHECK बाधा परिभाषित है, हम नीचे दी गई क्वेरी का उपयोग करेंगे:

SHOW CREATE TABLE MANAGER;

हम प्रबंधक तालिका में एक रिकॉर्ड डालेंगे जहां एक प्रबंधक का वेतन 60000 से कम है और विभाग जावा है।

INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 59500, 'Java');

जब हमने एक प्रबंधक रिकॉर्ड डाला जिसका वेतन 60000 से कम है, तो बाधा विफल त्रुटि संदेश प्रदर्शित होता है; क्यों? क्योंकि हमने वेतन पर चेक बाधा लागू की है जो केवल उन रिकॉर्डों को अनुमति देगा जिनके प्रबंधक का वेतन 60000 से अधिक है। लेकिन विभाग के कॉलम पर कोई बाधा त्रुटि नहीं हुई क्योंकि हमने उन मूल्यों को सम्मिलित किया है जिन्हें कॉलम डालने की अनुमति है,

हम प्रबंधक तालिका में एक रिकॉर्ड डालेंगे जहाँ प्रबंधक का वेतन 60000 से अधिक है, और विभाग जावा है।

INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 62000, 'Java');

यह जांचने के लिए कि क्या डेटा किसी तालिका में डाला गया है, हम नीचे दी गई क्वेरी का उपयोग करेंगे:

SELECT * FROM MANAGER;

प्रबंधक रिकॉर्ड सफलतापूर्वक तालिका में डाला गया है क्योंकि हमने प्रबंधक वेतन 60000 से अधिक और विभाग का नाम जावा दर्ज किया है।

टेबल लेवल चेक बाधा

चेक बाधा को तालिका के अंत में परिभाषित किया गया है, जिसे तालिका स्तर की जांच बाधा के रूप में जाना जाता है। तालिका स्तर की जाँच बाधा का सिंटैक्स निम्नानुसार है,

CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE), COLUMN_NAME3 DATATYPE(SIZE), CONSTRAINT CONSTAINT_NAME CHECK(COLUMN_NAME CONDITION));

उदाहरण 1: हम एक टेबल बनाएंगे और एक टेबल में निम्न में से किसी एक कॉलम पर टेबल लेवल चेक बाधा को परिभाषित करेंगे।

CREATE TABLE EMPLOYEES (EMPLOYEEID INT PRIMARY KEY, EMPLOYEE_NAME VARCHAR(50) NOT NULL, SALARY INT, CITY VARCHAR(20) NOT NULL, DEPARTMENT VARCHAR(30) NOT NULL, CONSTRAINT salary_constraint CHECK(SALARY > 40000));

उपरोक्त प्रश्न में, हमने कर्मचारी . नाम की एक तालिका बनाई है और कुछ स्तंभों को परिभाषित किया। कर्मचारी तालिका में, हमने वेतन . पर चेक बाधाओं को निर्दिष्ट किया है कॉलम। बाधा ही कहती है कि वेतन स्तंभ केवल उन्हीं आंकड़ों को स्वीकार करेगा जिनका कर्मचारी वेतन 40,000 से अधिक है; यदि वेतन 40,000 बाधाओं से कम है, तो उल्लंघन त्रुटियाँ होंगी।

यह जांचने के लिए कि वेतन कॉलम पर CHECK बाधा परिभाषित है, हम नीचे दी गई क्वेरी का उपयोग करेंगे:

SHOW CREATE TABLE EMPLOYEES;

हम कर्मचारी तालिका में एक रिकॉर्ड डालेंगे जहां एक कर्मचारी का वेतन 40,000 से कम है।

INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 38000, 'Pune', 'Java');

जब हमने एक कर्मचारी रिकॉर्ड डाला जिसका वेतन 40,000 से कम है, तो बाधा विफल त्रुटि संदेश प्रदर्शित होता है; क्यों? क्योंकि हमने वेतन पर चेक प्रतिबंध लागू किया है जो केवल उन्हीं रिकॉर्डों को अनुमति देगा जिनके कर्मचारी का वेतन 40,000 से अधिक है।

हम कर्मचारी तालिका में एक रिकॉर्ड डालेंगे जहां एक कर्मचारी का वेतन 40,000 से अधिक है।

INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 45000, 'Pune', 'Java');

यह जांचने के लिए कि क्या डेटा किसी तालिका में डाला गया है, हम नीचे दी गई क्वेरी का उपयोग करेंगे:

SELECT * FROM EMPLOYEES;

एक कर्मचारी रिकॉर्ड सफलतापूर्वक तालिका में डाला गया है क्योंकि हमने कर्मचारी वेतन 40,000 से अधिक दर्ज किया है।

उदाहरण 2: हम एक टेबल बनाएंगे और एक टेबल में एक से अधिक कॉलम पर एक कॉलम-लेवल चेक बाधा को परिभाषित करेंगे।

CREATE TABLE MANAGER (MANAGERID INT PRIMARY KEY, NAME VARCHAR(40) NOT NULL, SALARY INT, DEPARTMENT VARCHAR(40) NOT NULL, CONSTRAINT SALARY_CONST CHECK(SALARY>60000), CONSTRAINT DEPT_CONST CHECK(DEPARTMENT IN(‘'Oracle', 'FMW', ‘Java’, 'Testing')));

हमने एक टेबल नाम बनाया है प्रबंधक उपरोक्त क्वेरी में और कुछ स्तंभों को परिभाषित किया। हमने वेतन . पर जांच संबंधी प्रतिबंध निर्दिष्ट किए हैं तालिका प्रबंधक में स्तंभ। बाधा ही कहती है कि वेतन स्तंभ उन्हीं आंकड़ों को स्वीकार करेगा जिनका प्रबंधक वेतन 600000 से अधिक है; यदि वेतन 60000 से कम है, तो बाधा उल्लंघन त्रुटियां होंगी, और प्रबंधक का विभाग Oracle, FMW, परीक्षण और Java है।

यह जांचने के लिए कि वेतन कॉलम और विभाग कॉलम पर CHECK बाधा परिभाषित है, हम नीचे दी गई क्वेरी का उपयोग करेंगे:

SHOW CREATE TABLE MANAGER;

हम प्रबंधक तालिका में एक रिकॉर्ड डालेंगे जहां एक प्रबंधक का वेतन 60000 से कम है और विभाग जावा है।

INSERT INTO MANAGER VALUES(1, 'Surili Jain', 59500, 'Java');

जब हमने एक प्रबंधक रिकॉर्ड डाला जिसका वेतन 60000 से कम है, तो बाधा विफल त्रुटि संदेश प्रदर्शित होता है; क्यों? क्योंकि हमने वेतन पर चेक बाधा लागू की है जो केवल उन रिकॉर्डों को अनुमति देगा जिनके प्रबंधक का वेतन 60000 से अधिक है। लेकिन विभाग के कॉलम पर कोई बाधा त्रुटि नहीं हुई क्योंकि हमने उन मूल्यों को सम्मिलित किया है जिन्हें कॉलम डालने की अनुमति है,

हम प्रबंधक तालिका में एक रिकॉर्ड डालेंगे जहाँ प्रबंधक का वेतन 60000 से अधिक है, और विभाग जावा है।

INSERT INTO MANAGER VALUES(1, 'Surili Jain', 62500, 'Java');

यह जांचने के लिए कि क्या डेटा किसी तालिका में डाला गया है, हम नीचे दी गई क्वेरी का उपयोग करेंगे:

SELECT * FROM MANAGER;

प्रबंधक रिकॉर्ड सफलतापूर्वक तालिका में डाला गया है क्योंकि हमने प्रबंधक वेतन 60000 से अधिक और विभाग का नाम जावा दर्ज किया है।

Alter का उपयोग करके बाधाओं की जांच करें

हमने एक तालिका बनाई और तालिका बनाते समय CHECK CONSTRAINT जोड़ना भूल गए, और फिर हमें एक तालिका में CHECK CONSTRAINT जोड़ने की आवश्यकता है। ऐसे मामलों में, हम मौजूदा टेबल पर CHECK CONSTRAINT को लागू करने के लिए ALTER कमांड का उपयोग करेंगे।

इस प्रकार परिवर्तन का उपयोग कर चेक बाधा का सिंटैक्स,

ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME CHECK (COLUMN_NAME CONDITION);

उदाहरण 1: मान लीजिए हमने एक कर्मचारी . बनाया है चेक बाधाओं को जोड़े बिना तालिका। अब हम किसी एक कॉलम पर Check Constraint जोड़ना चाहते हैं। फिर हम नीचे दी गई क्वेरी का उपयोग करेंगे:

ALTER TABLE EMPLOYEES ADD CONSTRAINT Sal_Constraint CHECK (SALARY > 35000);  

क्रॉस-चेक करने के लिए कि CHECK बाधा वेतन . पर परिभाषित है कॉलम, हम नीचे दी गई क्वेरी का उपयोग करेंगे:

SHOW CREATE TABLE EMPLOYEES;

हम कर्मचारी तालिका में एक रिकॉर्ड डालेंगे जहां कर्मचारी का वेतन 35000 से कम है।

INSERT INTO EMPLOYEES VALUES (1001, 'Abhinav Patil', 30000, 'Mumbai', 'Testing');

जब हमने एक कर्मचारी रिकॉर्ड डाला जिसका वेतन 35000 से कम है, तो बाधा विफल त्रुटि संदेश प्रदर्शित होता है; क्यों? क्योंकि हमने वेतन पर चेक प्रतिबंध लागू किया है जो केवल उन्हीं रिकॉर्ड को अनुमति देगा जिनके कर्मचारी का वेतन 35000 से अधिक है।

उदाहरण 2: मान लीजिए हमने एक कर्मचारी . बनाया है चेक बाधाओं को जोड़े बिना तालिका। अब हम किसी एक कॉलम पर Check Constraint जोड़ना चाहते हैं। फिर हम नीचे दी गई क्वेरी का उपयोग करेंगे:

ALTER TABLE EMPLOYEES ADD CONSTRAINT City_Constraint CHECK (CITY IN ('Mumbai', 'Pune', 'Bangalore', 'Chennai'));

क्रॉस-चेक करने के लिए कि CHECK बाधा शहर . पर परिभाषित है कॉलम, हम नीचे दी गई क्वेरी का उपयोग करेंगे:

SHOW CREATE TABLE EMPLOYEES;

हम कर्मचारी तालिका में एक रिकॉर्ड डालेंगे जहां एक कर्मचारी का शहर जयपुर है।

SHOW CREATE TABLE EMPLOYEES;

जब हमने एक कर्मचारी रिकॉर्ड डाला जिसका शहर का नाम जयपुर है, बाधा विफल त्रुटि संदेश प्रदर्शित होता है; क्यों? क्योंकि हमने शहर पर चेक कंस्ट्रक्शन लागू किया है जो केवल उन्हीं रिकॉर्ड को अनुमति देगा जहां शहर का नाम 'मुंबई', 'पुणे', 'बैंगलोर', या 'चेन्नई' होगा।

ड्रॉप चेक बाधा

मान लीजिए कि हमने टेबल कॉलम पर CHECK CONSTRAINT को परिभाषित किया है। बाद में हम उस CONSTRAINT को कॉलम से हटाना चाहते हैं। फिर हम CHECK CONSTRAINT को छोड़ने के लिए ALTER कमांड का उपयोग करेंगे।

ड्रॉप चेक बाधा का सिंटैक्स निम्नानुसार है,

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

उदाहरण 1: मान लीजिए कि हमने कर्मचारी तालिका के किसी एक कॉलम पर चेक बाधा को परिभाषित किया है। बाद में, हमने उस बाधा को छोड़ने का फैसला किया।

हम सबसे पहले निर्मित बाधा की जांच करेंगे, इसके लिए निम्न क्वेरी का उपयोग करें:

SHOW CREATE TABLE EMPLOYEES;

हम 'City_Constraint' नाम की बाधा को छोड़ने के लिए नीचे दी गई क्वेरी लिखेंगे।

ALTER TABLE EMPLOYEES DROP CONSTRAINT City_Constraint;

यह जांचने के लिए कि बाधा सफलतापूर्वक हटा दी गई है, हम फिर से SHOW CREATE TABLE क्वेरी का उपयोग करेंगे।

SHOW CREATE TABLE EMPLOYEES;

उदाहरण 2: मान लीजिए कि हमने प्रबंधक तालिका के किसी एक कॉलम पर चेक बाधा को परिभाषित किया है। बाद में, हमने उस बाधा को छोड़ने का फैसला किया।

हम सबसे पहले निर्मित बाधा की जांच करेंगे, इसके लिए निम्न क्वेरी का उपयोग करें:

SHOW CREATE TABLE MANAGER;

हम 'SALARY_CONST' नाम की बाधा को छोड़ने के लिए नीचे दी गई क्वेरी लिखेंगे।

ALTER TABLE MANAGER DROP CONSTRAINT SALARY_CONST;

यह जांचने के लिए कि बाधा सफलतापूर्वक हटा दी गई है, हम फिर से SHOW CREATE TABLE क्वेरी का उपयोग करेंगे।

SHOW CREATE TABLE MANAGER;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जॉइन के साथ एसक्यूएल अपडेट स्टेटमेंट का उपयोग करने के लिए 5 नो-परेशानी युक्तियाँ

  2. डेटाबेस डिजाइन 101

  3. डेटाबेस यूनिट परीक्षण में निर्भरता और डेटा को अलग करने की कला

  4. SSH से एक डेटाबेस का बैकअप / निर्यात करें

  5. ScaleGrid DBaaS को क्लाउड एक्सीलेंस अवार्ड्स 2018 के लिए शॉर्टलिस्ट किया गया