मैंने तालिका ए पर एक ऑपरेशन के बाद तालिका बी में एक पंक्ति डालने के लिए एक ट्रिगर लिखा है। किसी कारण से, इसका कोई प्रभाव नहीं पड़ता है यदि मैं इस ट्रिगर को 'डालने के बाद' जोड़ता हूं और फिर एक पंक्ति डालता हूं। हालांकि, यह काम करता है अगर मैं ट्रिगर को 'अपडेट के बाद' के रूप में जोड़ता हूं, और पंक्ति को अद्यतन करता हूं।MYSQL ट्रिगर काम करता है अगर मैं 'अद्यतन के बाद' उपयोग करता हूं लेकिन 'डालने के बाद' नहीं?
यहां ट्रिगर कोड है। जब मैं 'अद्यतन के बाद' के साथ 'अद्यतन के बाद' को प्रतिस्थापित करता हूं, और एक सम्मिलित करता हूं, तो जब कोई नई पंक्ति डालने पर कुछ भी नहीं होता है। ट्रिगर बनाने के दौरान मुझे कोई त्रुटि नहीं मिलती है, और मैं उसी तालिका को अपडेट करने की कोशिश नहीं कर रहा हूं जिस पर ट्रिगर सेट किया जा रहा है। किसी भी मदद की सराहना की है! धन्यवाद, जेन
drop trigger if exists insertUndecided;
DELIMITER //
CREATE TRIGGER insertUndecided
AFTER UPDATE ON jiraissue
FOR EACH ROW
BEGIN
insert into nodeassociation (SOURCE_NODE_ID, SOURCE_NODE_ENTITY, SINK_NODE_ID, SINK_NODE_ENTITY, ASSOCIATION_TYPE, SEQUENCE)
select
NEW.id as SOURCE_NODE_ID,
'Issue' as SOURCE_NODE_ENTITY,
(select pv.id from projectversion pv
where pv.vname='undecided'
and pv.project=NEW.project) as SINK_NODE_ID,
'Version' as SINK_NODE_ENTITY,
'IssueFixVersion' as ASSOCIATION_TYPE,
NULL as SEQUENCE
from dual where exists
(select pkey from jiraissue
where id=NEW.id and id not in
(select distinct source_node_id from nodeassociation
where source_node_entity='Issue' and SINK_NODE_ENTITY='Version'
and ASSOCIATION_TYPE='IssueFixVersion'));
END;//
DELIMITER ;
यह उत्तर देखें जो आपकी स्थिति पर भी लागू होता है: http://stackoverflow.com/a/9097459/870122 – perissf
ट्रिगर के बिना इस व्यवहार को पुन: उत्पन्न करने का प्रयास करें। चयन कथन निष्पादित करें। क्या यह किसी भी पंक्ति को वापस कर देगा? – Devart
@perissf - आपके उत्तर के लिए धन्यवाद। यह मुद्दा "संग्रहीत फ़ंक्शन या ट्रिगर के भीतर है, इसे उस तालिका को संशोधित करने की अनुमति नहीं है जिसे पहले से ही इस्तेमाल किया जा रहा है (पढ़ने या लिखने के लिए) उस कथन द्वारा जो फ़ंक्शन या ट्रिगर को बुलाया गया है।" जबकि मैं वास्तव में जिराइज़ू टेबल पढ़ रहा हूं, मैं इसे अपडेट नहीं कर रहा हूं। और यह स्पष्ट नहीं करता कि ऐसा क्यों लगता है कि अगर मैं इसे 'अद्यतन के बाद' चलाता हूं, लेकिन 'इन्टरर्ट के बाद' नहीं? – jen