Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में डिफ़ॉल्ट मान के लिए फंक्शन कैसे उपयोग करें?

MySQL में कॉलम डिफ़ॉल्ट मान के लिए फंक्शन सीधे उपयोग नहीं कर सकते (केवल स्थिर मान या CURRENT_TIMESTAMP अनुमत हैं)। समाधान: ट्रिगर उपयोग करें।

समस्या

-- यह काम नहीं करेगा:
CREATE TABLE t (id INT DEFAULT UUID());  -- त्रुटि
CREATE TABLE t (created DATETIME DEFAULT NOW());  -- केवल CURRENT_TIMESTAMP काम करता है

समाधान: BEFORE INSERT ट्रिगर

CREATE TABLE TbLFunctionTrigger (
    id CHAR(36),           -- UUID के लिए
    username VARCHAR(100),
    created_at DATETIME
);

CREATE TRIGGER insertBef
BEFORE INSERT ON TbLFunctionTrigger
FOR EACH ROW
BEGIN
    SET NEW.id = UUID();
    SET NEW.created_at = NOW();
END;

टेस्ट

mysql> INSERT INTO TbLFunctionTrigger (username) VALUES ('john');
mysql> SELECT * FROM TbLFunctionTrigger;
+--------------------------------------+----------+---------------------+
| id                                   | username | created_at          |
+--------------------------------------+----------+---------------------+
| a1b2c3d4-e5f6-7890-abcd-ef1234567890 | john     | 2024-01-15 10:30:00 |
+--------------------------------------+----------+---------------------+

अन्य उपयोगी ट्रिगर पैटर्न

-- UPDATE पर updated_at ऑटो-अपडेट
CREATE TRIGGER update_ts
BEFORE UPDATE ON my_table
FOR EACH ROW
SET NEW.updated_at = NOW();

-- जटिल डिफ़ॉल्ट: सीक्वेंस नंबर
CREATE TRIGGER seq_num
BEFORE INSERT ON orders
FOR EACH ROW
SET NEW.order_no = CONCAT('ORD-', DATE_FORMAT(NOW(), '%Y%m%d'), '-', 
    LPAD((SELECT COALESCE(MAX(CAST(SUBSTRING(order_no, -4) AS UNSIGNED)), 0) + 1 
          FROM orders 
          WHERE order_no LIKE CONCAT('ORD-', DATE_FORMAT(NOW(), '%Y%m%d'), '-%')), 4, '0'));

MySQL 8.0.13+ अपवाद

CURRENT_TIMESTAMP, NOW(), UUID() (केवल डिफ़ॉल्ट के रूप में नहीं, बल्कि DEFAULT (UUID()) सिंटैक्स के साथ) कुछ फंक्शन अब डिफ़ॉल्ट में अनुमत हैं:

CREATE TABLE t (
    id CHAR(36) DEFAULT (UUID()),
    created DATETIME DEFAULT CURRENT_TIMESTAMP
);

लेकिन ट्रिगर तरीका सभी संस्करणों पर काम करता है और अधिक लचीला है।

  1. - MySQL में डिफ़ॉल्ट मान NONE कैसे सेट करें

    MySQL में डिफ़ॉल्ट मान सेट करने के लिए DEFAULT कीवर्ड का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable ( ClientCountryName varchar(100) DEFAULT NONE ); Query OK, 0 rows affected (0.65 sec) हमने ऊपर डालने के लिए डिफ़ॉल्ट सेट किया है। अब इन्सर्ट कमांड का उपयोग करके ट

  1. - MySQL में DEFAULT NULL का उपयोग करके डिफ़ॉल्ट मान NULL कैसे सेट करें?

    MySQL में DEFAULT NULL के साथ कॉलम डिफ़ॉल्ट सेट करना MySQL में, आप DEFAULT NULL क्लॉज का उपयोग करके किसी कॉलम के लिए स्पष्ट रूप से NULL को डिफ़ॉल्ट मान के रूप में सेट कर सकते हैं। यह तब उपयोगी होता है जब कोई मान प्रदान नहीं किया जाता है तो कॉलम वैकल्पिक होना चाहिए। उदाहरण: वैकल्पिक कॉलम वाली छात्र

  1. - MySQL में COALESCE() से खाली पंक्ति के लिए डिफ़ॉल्ट मान सेट करें

    COALESCE() फ़ंक्शन का उपयोग करके NULL मानों को क्वेरी परिणाम में डिफ़ॉल्ट मान से बदल सकते हैं। यह टेबल डेटा नहीं बदलता, केवल आउटपुट प्रभावित करता है। टेबल बनाएं mysql> CREATE TABLE DemoTable1863 (FirstName VARCHAR(20)); डेटा डालें mysql> INSERT INTO DemoTable1863 VALUES(Chris); mysql> INS