2010-02-15 14 views
5

मैं एक पंक्ति डालने के लिए एक ट्रिगर का उपयोग करता हूं और बाद की क्वेरी में उपयोग करने के लिए अंतिम बनाई गई आईडी का उपयोग करना चाहता हूं।एक ट्रिगर में नवीनतम डाला गया आईडी प्राप्त करें?

मैं यह कैसे कर सकता हूं?

कोड लगता है:

BEGIN 
IF (NEW.counter >= 100) THEN 
INSERT INTO tagCategories (name, counter) VALUES ('unnamed', NEW.counter); 
// here i want to have access to the above inserted id 
UPDATE tagCategories2tagPairs SET tagCategoryId = <<ID_HERE>> WHERE tagPairId = OLD.id 
END IF; 
END 

उत्तर

7

आप LAST_INSERT_ID() को देखा है? लेकिन ध्यान रखें:

आप एक एकल सम्मिलित करें कथन का उपयोग एकाधिक पंक्तियों को सम्मिलित करते हैं, तो LAST_INSERT_ID() मान पहले डाला पंक्ति केवल के लिए उत्पन्न देता है।

+0

जब मैं एक after_trigger में इस का उपयोग करें, यह किसी कारण ... जैसे के लिए पिछले डाला आईडी रिटर्न यद्यपि 'NEW.id' का उपयोग किया जा सकता है। और उदा। 'OLD.id' का उपयोग हटा या अपडेट करने पर किया जा सकता है (कम से कम यह दस्तावेज़ों में लिखा गया है।)। [डॉक्स।] (https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html) – ravo10

1

मैं की तरह "एएए" एक कंपनी के पहले अक्षर का उपयोग करें और इसे करने के लिए डालने आईडी जोड़ सकते हैं और एक आंतरिक कंपनी आईडी के रूप में उपयोग करना चाहते थे और यह कैसे मैं पिछले वर्तमान डालने आईडी उठाया है

DELIMITER // 
CREATE TRIGGER company_run_before_insert BEFORE INSERT ON ap_company 
FOR EACH ROW 
BEGIN 

SET @lastID = (SELECT id FROM ap_company ORDER BY id DESC LIMIT 1); 
IF @lastID IS NULL OR @lastID = '' THEN 
    SET @lastID = 0; 
END IF; 
SET @lastID = @lastID +1; 
SET NEW.ap_company_id = concat(NEW.company_initials,'-', @lastID); 
END; 
+0

आपको बहुत बहुत धन्यवाद ... – Ivan

0

उपयोग NEW.id

BEGIN 
insert INTO test_questions (test_id, question, variant1, variant2, variant3, w1, type_id) 
SELECT NEW.id, t1.question, t1.v1, t1.v2, t1.v3, t1.answer, 1 
FROM new_minitest_questions t1 
WHERE t1.mt_id = NEW.old_id; 
END 
0

के बाद ट्रिगर सूचना स्कीमा से पिछले ऑटो बढ़ते क्रम में मूल्य मिल जाएगा। मैंने इस ट्रिगर को एक स्लग उत्पन्न करने के लिए लिखा था।

उदाहरण के लिए, यदि कॉलम का नाम "नाम" है और कॉलम में "रॉबिन शंकर" जैसे मूल्य हैं, तो ट्रिगर रिक्त स्थान को "-" के साथ बदल देगा और स्लग के अंत में ऑटो वृद्धि आईडी को भी जोड़ देगा, इसलिए एक अद्वितीय स्लग बनाते हैं।

robin_shankar_9071

DELIMITER // 
CREATE TRIGGER insert_slug_sd 
BEFORE INSERT ON `your_table_name` 
FOR EACH ROW 
BEGIN 

DECLARE auto_increment_ INT(11); 

SELECT 
    `auto_increment` 
INTO 
    auto_increment_ 
FROM INFORMATION_SCHEMA.TABLES 
    WHERE 
table_name = 'your_table_name'; 

SET NEW.`Slug` = CONCAT(LOWER(REPLACE(NEW.`Name`,' ','-')),'-',auto_increment_); 
END; // 

DELIMITER; 
0
SET NEW.num=CONCAT("А-", (
    SELECT `auto_increment` 
    FROM INFORMATION_SCHEMA.TABLES  
    WHERE table_name = 'menu') 
) 
+0

अधिकतम (आईडी) और इसी तरह काम नहीं कर रहा है यदि आप अंतिम रिकॉर्ड हटा रहे हैं –

संबंधित मुद्दे