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

MySQL में INSERT से पहले ट्रिगर कैसे बनाएं?

MySQL में BEFORE INSERT ट्रिगर किसी नई पंक्ति के इन्सर्ट होने से पहले स्वचालित रूप से निष्पादित होता है। इसका उपयोग डेटा वैलिडेशन, डिफ़ॉल्ट मान सेट करने, बिजनेस नियम लागू करने, या इन्सर्ट रोकने के लिए किया जाता है।

सिंटैक्स

DELIMITER //
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
    -- ट्रिगर लॉजिक
END //
DELIMITER ;

उदाहरण: योग 60 से अधिक होने पर इन्सर्ट रोकना

डेमो टेबल बनाएं:

mysql> CREATE TABLE DemoTable1919 (Value INT);

ट्रिगर बनाएं (इन्सर्ट से पहले योग चेक करें):

mysql> DELIMITER //
mysql> CREATE TRIGGER sumis60 BEFORE INSERT ON DemoTable1919
FOR EACH ROW
BEGIN
    DECLARE custom_message VARCHAR(256);
    IF (SELECT SUM(Value) FROM DemoTable1919) >= 60 THEN
        SET custom_message = 'Cannot insert because sum(Value) would exceed 60';
        SIGNAL SQLSTATE '13500' SET MESSAGE_TEXT = custom_message;
    END IF;
END //
mysql> DELIMITER ;

ट्रिगर टेस्ट करें:

mysql> INSERT INTO DemoTable1919 VALUES (10);  -- OK, sum=10
mysql> INSERT INTO DemoTable1919 VALUES (20);  -- OK, sum=30
mysql> INSERT INTO DemoTable1919 VALUES (30);  -- OK, sum=60
mysql> INSERT INTO DemoTable1919 VALUES (40);  -- ERROR! sum would be 100
ERROR 1644 (13500): Cannot insert because sum(Value) would exceed 60

ट्रिगर घटक व्याख्या

  • BEFORE INSERT: इन्सर्ट से पहले फायर होता है (मान बदल सकते हैं, रोक सकते हैं)
  • FOR EACH ROW: प्रत्येक प्रभावित पंक्ति के लिए एक बार निष्पादित
  • NEW: नई पंक्ति के कॉलम एक्सेस करने के लिए (NEW.column_name)
  • SIGNAL SQLSTATE: कस्टम एरर उठाकर ऑपरेशन रोकता है
  • SQLSTATE '13500': यूज़र-डिफ़ाइंड एरर के लिए सामान्य कोड

NEW कीवर्ड के साथ मान संशोधित करना

CREATE TRIGGER before_user_insert
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
    SET NEW.created_at = NOW();
    SET NEW.email = LOWER(TRIM(NEW.email));
    SET NEW.username = CONCAT('usr_', NEW.username);
END

अन्य ट्रिगर समय

समयउपयोगमान बदल सकते हैं?
BEFORE INSERT/UPDATEवैलिडेशन, डिफ़ॉल्ट, संशोधनहां (NEW)
AFTER INSERT/UPDATE/DELETEलॉगिंग, ऑडिट, कैस्केडनहीं

ट्रिगर प्रबंधन

-- ट्रिगर देखें
SHOW TRIGGERS;

-- ट्रिगर ड्रॉप करें
DROP TRIGGER IF EXISTS trigger_name;

सावधानियां

  • ट्रिगर के अंदर उसी टेबल को क्वेरी न करें (म्यूटेटिंग टेबल एरर)
  • जटिल लॉजिक से बचें; प्रदर्शन प्रभावित हो सकता है
  • ट्रांजैक्शन के साथ काम करते हैं (रोलबैक पर ट्रिगर प्रभाव भी रोलबैक)

BEFORE INSERT ट्रिगर डेटा इंटीग्रिटी और बिजनेस नियमों को डेटाबेस लेयर पर लागू करने का शक्तिशाली तरीका है।

  1. - MySQL INSERT में UNIQUE KEY का उपयोग करके डुप्लिकेट पंक्तियों को रोकें

    टेबल निर्माण के दौरान कॉलम पर UNIQUE KEY प्रतिबंध परिभाषित करें और डुप्लिकेट को चुपचाप छोड़ने के लिए INSERT IGNORE का उपयोग करें। UNIQUE KEY के साथ टेबल बनाना CREATE TABLE DemoTable ( Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName VARCHAR(30), UNIQUE KEY(FirstName) ); Query OK,

  1. - MySQL में डबल कोट्स के साथ रिकॉर्ड्स कैसे डालें?

    बैकलैश (\) का उपयोग करके डबल कोट्स एस्केप करना डबल कोट्स के साथ रिकॉर्ड्स डालने के लिए बैकलैश (\) का उपयोग करें: सिंटैक्स INSERT INTO yourTableName VALUES(\yourValue\); आइए पहले एक टेबल बनाते हैं: CREATE TABLE DemoTable ( Name VARCHAR(20) ); Query OK, 0 rows affected (0.63 sec) डबल कोट्स के

  1. - MySQL में TRUNCATE TABLE से ऑटो-इन्क्रीमेंट कॉलम रीसेट करें

    TRUNCATE TABLE टेबल की सभी पंक्तियाँ हटाता है और AUTO_INCREMENT काउंटर को शुरुआती मान (डिफ़ॉल्ट 1) पर रीसेट करता है। यह DELETE से तेज़ है और लॉग नहीं करता। टेबल बनाएं mysql> CREATE TABLE DemoTable1888 ( Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ); डेटा डालें mysql> INSERT INTO DemoTable