काम नहीं करता मैं एक INSERT
बयान है कि इस तरह दिखता है:पर नकली चाबी अद्यतन जब वहाँ कोई अपडेट प्रारंभ
INSERT INTO officer (officer_number,
name,
bank_id)
VALUES ('',
'',
8)
ON DUPLICATE KEY UPDATE officer_number = '',
name = '',
bank_id = 8,
id = LAST_INSERT_ID(id)
यह कर के इस तरह ठीक काम कर रहा है। यह काम करना बंद कर जब मैं निम्नलिखित ट्रिगर कहा:
CREATE TRIGGER officer_update BEFORE UPDATE ON `officer`
FOR EACH ROW SET NEW.updated_at = NOW(), NEW.created_at = OLD.created_at
ऐसा नहीं है कि officer
रिकॉर्ड डाला जाता है नहीं कर रहा है हो रही है। ऐसा लगता है कि ट्रिगर LAST_INSERT_ID()
या कुछ अपहरण कर रहा है। मैं कहता हूँ इस वजह अगले क्वेरी कि मार डाला है यह है:
INSERT INTO account (import_id,
branch_id,
account_number,
officer_id,
customer_id,
open_date,
maturity_date,
interest_rate,
balance,
opening_balance)
VALUES ('123',
'4567',
'789',
'0', # This is the officer id which is of course invalid
'321',
'1992-04-22',
'2012-05-22',
'0.0123',
'0',
'10000')
जब से मैं एक ही सटीक फ़ाइल के साथ सफल आयात के दर्जनों दौड़े हैं, मैं नहीं मेरा कोड बदल दिया है, और अब मेरी आयात काम नहीं कर रहे इस ट्रिगर को जोड़ने के बाद, मुझे यह समझना होगा कि ट्रिगर अपराधी है। मेरे पास एक और टेबल के साथ एक समान स्थिति थी और ट्रिगर को हटाने से समस्या ठीक हो गई।
तो मेरी प्रश्न हैं:
- कोई व्याख्या कर सकते हैं क्या, विशेष रूप से, खड़ी कर रहा है मेरी अधिकारी आईडी 0 पर सेट करने के लिए? इस समस्या का एक अच्छा समाधान
- क्या है?
मैं officer.created_at
पर एक और ट्रिगर (और अन्य तालिकाओं 'created_at
रों का एक बहुत) है और मैं अजीब समाधान के कुछ प्रकार से बचने के लिए मैं कहाँ created_at
पर एक ट्रिगर लेकिन updated_at
पर एक DEFAULT CURRENT_TIMESTAMP
है पसंद करेंगे। किसी कारण से, MySQL केवल तालिका के अनुसार एक ऑटो टाइमस्टैम्प की अनुमति देता है, तो मैं created_at
और updated_at
दोनों के लिए CURRENT_TIMESTAMP
नहीं कर सकते।
यहाँ officer
के लिए SHOW CREATE TABLE
है:
CREATE TABLE `officer` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`officer_number` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`bank_id` bigint(20) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `officer_number` (`officer_number`,`name`),
UNIQUE KEY `officer_number_2` (`officer_number`,`bank_id`),
KEY `bank_id` (`bank_id`),
CONSTRAINT `officer_ibfk_1` FOREIGN KEY (`bank_id`) REFERENCES `bank` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=102735 DEFAULT CHARSET=latin1
क्या आप 'SHOW CREATE तालिका अधिकारी' के परिणाम पोस्ट कर सकते हैं और क्वेरी गलत तरीके से काम करती है? आपका शीर्षक 'डिप्लिकेट कुंजी अपडेट' पर कहता है लेकिन पोस्ट में ऐसी कोई प्रश्न नहीं है। – Quassnoi
वूप्स। अच्छी पकड़। मैंने सवाल अपडेट कर लिया है। –
क्या आप अपना कोड पेस्ट कर सकते हैं जिसका उपयोग आप * retasve * 'LAST_INSERT_ID()' के मान पर करते हैं? ऐसा लगता है कि मेरी मशीन MySQL 5.1.53 –