SQLite में एक टेबल बनाते समय, आपके पास प्रत्येक कॉलम में बाधाओं को जोड़ने का विकल्प होता है।
ऐसी ही एक बाधा है DEFAULT
बाधा।
DEFAULT
बाधा आपको उस स्थिति में उपयोग किए जाने वाले मान को निर्दिष्ट करने की अनुमति देती है जब कोई नई पंक्ति डाली जाती है तो उस कॉलम के लिए कोई मान प्रदान नहीं किया जाता है।
अगर आप नहीं एक DEFAULT
का उपयोग करें क्लॉज, तो कॉलम के लिए डिफ़ॉल्ट मान NULL
है ।
संभावित डिफ़ॉल्ट मान
DEFAULT
. का स्पष्ट डिफ़ॉल्ट मान बाधा निम्न में से कोई भी हो सकती है:
- एक स्ट्रिंग स्थिरांक
- एक बूँद स्थिरांक
- एक हस्ताक्षरित संख्या
- कोष्ठक में संलग्न कोई भी स्थिर व्यंजक।
CURRENT_TIME
CURRENT_DATE
CURRENT_TIMESTAMP
NULL
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price DEFAULT 0.00
);
यहां मैंने एक DEFAULT
जोड़ा है कीमत . के लिए बाधा कॉलम। इस मामले में, डिफ़ॉल्ट मान 0.00 है ।
अब जब मैं कीमत . के लिए कोई मान निर्दिष्ट किए बिना एक नई पंक्ति सम्मिलित करता हूं कॉलम, डिफ़ॉल्ट मान का उपयोग किया जाता है।
INSERT INTO Products ( ProductId, ProductName )
VALUES (1, 'Long Weight');
SELECT * FROM Products;
परिणाम:
ProductId ProductName Price ---------- ----------- ---------- 1 Long Weight 0.0
स्पष्ट मान
बेशक, डिफ़ॉल्ट मान का उपयोग केवल तभी किया जाता है जब आप स्पष्ट रूप से कोई मान प्रदान नहीं करते हैं। यदि आप करते हैं, तो इसके बजाय उस मान का उपयोग किया जाता है।
यहाँ एक और उदाहरण है। इस बार मैं स्पष्ट रूप से उस कीमत . के लिए एक मूल्य प्रदान करता हूं कॉलम।
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (2, 'Left-Handed Screwdriver', 19.99);
SELECT * FROM Products;
परिणाम:
ProductId ProductName Price ---------- ------------------------- ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99
स्पष्ट NULLs
पिछला उदाहरण स्पष्ट रूप से प्रदान किए गए NULL
. पर भी लागू होता है मान।
इसे प्रदर्शित करने के लिए, अगर मैं स्पष्ट रूप से NULL
डालता हूं तो क्या होता है? कीमत . में कॉलम।
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (3, 'Elbow Grease', NULL);
SELECT * FROM Products;
परिणाम:
ProductId ProductName Price ---------- ------------------------ ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99 3 Elbow Grease
इस बार कीमत कॉलम NULL
है , क्योंकि मैंने स्पष्ट रूप से उस कॉलम में यही डाला है।
ऐसा होने से रोकने के लिए, SQLite में डेटा सम्मिलित करते समय NULL मानों को कॉलम के डिफ़ॉल्ट मान में कैसे बदलें देखें।
डिफ़ॉल्ट टाइमस्टैम्प
इस उदाहरण में मैं एक और टेबल बनाता हूं। इस बार मैंने डिफ़ॉल्ट मान को वर्तमान टाइमस्टैम्प पर सेट किया है।
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type,
DateInserted DEFAULT CURRENT_TIMESTAMP
);
और अब कुछ डेटा के लिए।
INSERT INTO Types (Type)
VALUES ( 'Hardware' );
SELECT * FROM Types;
परिणाम:
TypeId Type DateInserted ---------- ---------- ------------------- 1 Hardware 2020-06-05 00:21:57
टाइमस्टैम्प उम्मीद के मुताबिक डाला गया है।
एक डिफ़ॉल्ट मान के रूप में स्वतः वृद्धिशील मान
ध्यान दें कि पिछले उदाहरण में मैंने TypeId . के लिए कोई मान भी नहीं दिया था कॉलम, लेकिन यह स्वचालित रूप से वैसे भी एक डिफ़ॉल्ट मान उत्पन्न करता है।
इस मामले में, डिफ़ॉल्ट मान DEFAULT
. के कारण नहीं था बाधा यह इस तथ्य के कारण था कि कॉलम एक प्राथमिक कुंजी कॉलम है जिसे INTEGER PRIMARY KEY
का उपयोग करके बनाया गया था। . जब आप INTEGER PRIMARY KEY
. का उपयोग करके किसी कॉलम को परिभाषित करते हैं , कॉलम स्वचालित रूप से एक ऑटो-इन्क्रीमेंट कॉलम बन जाता है।
इसे और अच्छी तरह से प्रदर्शित करने के लिए, अगर मैं कुछ और पंक्तियाँ सम्मिलित करता हूँ तो क्या होता है।
INSERT INTO Types (Type)
VALUES
( 'Software' ),
( 'Hardcopy' );
SELECT * FROM Types;
परिणाम:
TypeId Type DateInserted ---------- ---------- ------------------- 1 Hardware 2020-06-05 00:21:57 2 Software 2020-06-05 00:22:14 3 Hardcopy 2020-06-05 00:22:14
ऑटो-इन्क्रीमेंटिंग कॉलम के बारे में अधिक जानकारी के लिए, SQLite में ऑटोइनक्रिमेंट कैसे काम करता है, और SQLite में ऑटो-इंक्रीमेंटिंग कॉलम कैसे बनाएं देखें।
एक डिफ़ॉल्ट मान के रूप में अभिव्यक्ति
आप निरंतर अभिव्यक्ति का उपयोग डिफ़ॉल्ट मान के रूप में भी कर सकते हैं। ऐसा करने के लिए, व्यंजक कोष्ठकों में संलग्न होना चाहिए।
यहाँ एक उदाहरण है।
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
Name,
Entered DEFAULT (round(julianday('now'))),
Deadline DEFAULT (round(julianday('now')) + 10.5)
);
और अब कुछ डेटा के लिए।
INSERT INTO Person (Name)
VALUES ( 'Fred' );
SELECT * FROM Person;
परिणाम:
PersonId Name Entered Deadline ---------- ---------- ---------- ---------- 1 Fred 2459006.0 2459016.5
ध्यान दें कि व्यंजक एक स्थिर व्यंजक होना चाहिए। एक निरंतर अभिव्यक्ति एक अभिव्यक्ति है जिसमें केवल स्थिरांक होते हैं।
यदि आप किसी ऐसे व्यंजक का उपयोग करने का प्रयास करते हैं जिसमें केवल स्थिरांक नहीं हैं, तो आपको एक त्रुटि मिलेगी।
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
FirstName,
LastName,
UserName DEFAULT (FirstName || LastName)
);
परिणाम:
Error: default value of column [UserName] is not constant