PDA

View Full Version : اجرای تریگر



beh3000
یک شنبه 11 اسفند 1392, 13:29 عصر
سلام دوستان

من یه مشکلی دارم به این شرح :

کاربر میاد توی سایت من و میخواد پست ثبت کنه ... اون پست شاید گالری عکس داشته باشه شایدم نداشته باشه ( یعنی اینکه شاید در یک جدول درج انجام بشه شایدم در دو جدول ) حالا من میخوام بعد از انجام عمل ارسال پست یک تریگر اجرا بشه این امکان پذیره ؟؟؟ بعد از درج در یک جدول که راحت میشه تریگر اجرا کرد ولی شاید گالری عکس هم داشته باشه و گالری ها در یک جدول دیگه درج میشن بعد از درج در جدول گالری باید تریگر اجرا بشه و از داده های دوتا جدول استفاده میکنه .. امکانش هست چنین چیزی ؟

با transaction امکانش هست ؟ در واقع میخوام بعد از commit شدن transaction تریگر اجرا بشه

MMSHFE
یک شنبه 11 اسفند 1392, 14:43 عصر
ببینید، شما اگه Trigger برای درج روی یک جدول تعریف کنید، موقعی اجرا میشه که واقعاً عمل درج انجام بشه. درنتیجه اگه توی Transaction عمل درج انجام بشه ولی بنا به هر دلیلی، Rollback بشه، Trigger اجرا نمیشه و درصورت Commitشدن، اگه شرط Trigger توی Transaction شما اتفاق افتاده باشه (در این مثال، درج در جدول موردنظر Trigger)، در اینصورت Trigger هم کار خودش رو انجام میده.

beh3000
یک شنبه 11 اسفند 1392, 15:14 عصر
میدونم استاد من مشکلمو بیشتر شرح میدم
دوتا جدول داریم : جدول پست شامل ID , title
جدول گالری شامل : ID , postID , name

کاربری که میاد پست درج کنه دوتا حالت داره یا پستش گالری عکس نداره که تو این حالت فقط در جدول پست عمل درج انجام میشه و تریگر باید اجرا بشه
دومین حالت اینه که پستش گالری عکس داره که تو این حالت بعد از درج در جدول پست باید عمل درج در گالری هم انجام بشه بعد تریگر اجرا بشه (چون توی تریگر به داده های درج شده در جدول گالری نیاز دارم )

MMSHFE
یک شنبه 11 اسفند 1392, 15:30 عصر
ببینید، شما Trigger رو روی چی تنظیم کردین؟ Insert توی جدول اول؟ اگه اینطوره، باید ببینیم کدتون چطوریه چون طبق صحبت شما، Transaction شما حتی اگه توی جدول دوم چیزی درج نشه هم Rollback نداره و این یعنی اینکه اصلاً Transaction لازم ندارین و کوئری معمولی باید بنویسید. با این اوصاف، باید دنبال راهی باشین که Trigger بتونه تشخیص بده که توی جدول دوم هم چیزی درج شده یا نه. برای مثال، میتونید یک فیلد به جدول اول اضافه کنید که اگه درج در جدول دوم هم انجام شده، اون فیلد مقدارش با insert_id جدول دوم پر بشه و بعد، توی Trigger مقدار این فیلد رو چک کنید و اگه خالی نبود، رکورد مربوطه رو از جدول دوم (که توی این فیلد، id اون رو دارین) بخونید و اطلاعاتش رو استخراج کنید. اگر هم خالی بود که هیچ!