ট্রিগারটি আপডেটের পরে আপডেট হবে?


13

আমি কোনও আপডেটের সময়টি রেকর্ড করার জন্য একটি ট্রিগার তৈরি করতে চাই:

CREATE TRIGGER col_update
AFTER UPDATE ON col
FOR EACH ROW BEGIN
UPDATE col SET updated=NOW() WHERE id=NEW.id; // or OLD.id
END

সমস্যাটি হ'ল যখন এই ট্রিগার updatedকলামটি আপডেট করার চেষ্টা করে তখন এটি অন্য একটি আপডেটের ইভেন্টও হয়, যা ট্রিগারটি চালায়। এটি একটি অসীম লুপ তৈরি করবে, যা কাজ করে না।

আমি কীভাবে সম্পর্কিত কলামে আপডেটের সময়টি সঞ্চয় করতে পারি?

আমি একটি ট্রিগার ব্যবহার করতে চাই কারণ টেবিলে অনেকগুলি কলাম রয়েছে। আমি যদি আপডেটের সময়টি ম্যানুয়ালি সেট করার চেষ্টা করি, তবে আমার অনেক ক্যোয়ারী পরিবর্তন করতে হবে।

উত্তর:


17

BEFOREপরিবর্তে একটি ট্রিগার ব্যবহার করুন, এবং updatedকলামটি একটি মান নির্ধারণ করুন সেট করুন NEW.updated(এটি একটি সরল অ্যাসাইনমেন্ট হবে, একটি নয় UPDATE)। এইভাবে আপনি অতিরিক্ত UPDATEগুলি ট্রিগার করবেন না ।

আপনার ট্রিগার বডিটি সহজভাবে দেখতে পাবেন

SET NEW.updated = NOW()

আমি সাধারণত অন্যান্য টেবিলগুলি সংশোধন করার জন্য, নতুন (বা আপডেট করা) সারিটি সংশোধন করার জন্য, বা দমন করতে AFTERট্রিগারগুলি ব্যবহার করি ।BEFOREDELETE


1

যদি আপনার ক্ষেত্রে পছন্দ হয়, প্রতিবার রেকর্ড পরিবর্তন করা হয়েছে এমন সময় আপনি আপডেট হওয়া ক্ষেত্রটি পরিবর্তন করতে চান, আপনার ট্রিগার লাগবে না।

আপনি মাইএসকিউএল এর স্বয়ংক্রিয় সূচনা / আপডেট এইভাবে ব্যবহার করতে পারেন:

ALTER TABLE `yourtabelname` ADD `updated` DATETIME on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

অথবা টেবিল তৈরির সময়, দস্তাবেজগুলি থেকে :

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.