• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
اجرای یک ترانزاکشن
#1
دیروز دربه در دنبال اجرای یک ترانزاکشن روی مای اس کیو ال بودم.
من اینکارو با سی شارپ و اس کیوال سرور با راها و بارها انجام داده بودم ولی تو مای اسکیوال نه.
خیلی گشتم ولی به نتیجه درستی نرسیدم. مجبور شدم از دشتورات اس کیو ال استفاده کنم. حاص کارم این شد:
صورت سئوال :
دوتا جدول داریم که کلید اصلی اولی FirstId تو جدول دومی به عنوان کلید خارجی استفاده میشه.
از بد روزگار FirstId عدد و به صورته شمارنده ای بالا میره. من می خوام اول یه رکورد تو جدول اول درج کنم بعد یه رکورد هم تو جدول دوم بزارم. منتها دو جدول دوم اخرین ای دی از جدول اول هم به عنوان کلید خارجی باید ثبت شه. اگه جدول دوم نتونه اطلاعاتشو به هر دلیلی ثبت کنه باید اطلاعات جدول اول هم حذف شه.
برای شروع یه ترانزاکشن از دستور زیر استفاده میکنیم :
کد پی‌اچ‌پی:
START TRANSACTION
بعد دستور درج در جدول اول رو می نویسیسم:
کد پی‌اچ‌پی:
insert itno tblFirst (FirstId,Name)values ('ali',''); 
حالا میخواهیم توی ترانزاکشنمون مقدار اخرین آی دی درج شده رو بگیریم تا توی درج بعدی بتونیم ازش استفاده کنیم
کد پی‌اچ‌پی:
SET @A=1;
select @A:=last_insert_id() from tblFirst 
ای دی به دست اومده تو متغییر @A که تو اس کیوال تعریف شده ریخته میشه
حالا میریم سراغ درج دوم
کد پی‌اچ‌پی:
insert into tblSecond (FirstId,SecId)Values(@A,''); 

برای اجرای ترانزاکشن هم :
کد پی‌اچ‌پی:
commit
البته این کدا هنوز ناقصه
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#2
یعنی این کد کار می کنه؟
این توضیحات رو توی mysql بخونید
http://dev.mysql.com/doc/refman/5.0/en/i...-insert-id
  پاسخ
تشکر شده توسط :
#3
کجاش اشکال داره
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#4
هیچ جا
last_insert_id() from tblFirst
واسم‌جالب‌بود
من فقط last_insert_id() رو تنها دیده بودم
  پاسخ
تشکر شده توسط :
#5
من تست کردم جواب داد
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط : admin
#6
یک سوال شما ترانزکشن رو وری موتور myisam استفاده کردید یا موتور دیگه؟
  پاسخ
تشکر شده توسط :
#7
(۱۳۸۸ آذر ۰۴, ۰۷:۰۸ ب.ظ)zoghal نوشته: یک سوال شما ترانزکشن رو وری موتور myisam استفاده کردید یا موتور دیگه؟

myisam از تراکنش پشتیبانی نمیکنه
  پاسخ
تشکر شده توسط :
#8
ببخشید میپرم وسط بحثتون

من یکم سوادم کمه و کنجکاو
این ترانزاکشن اولین باره اسمش رو میشونم چی هست؟ کار چیه؟ چه کاربردی داره و کجاها استفاده میشه؟
با تشکر ممل آمریکایی
  پاسخ
تشکر شده توسط :
#9
(۱۳۸۸ آذر ۰۴, ۰۸:۱۹ ب.ظ)scorpion نوشته:
(۱۳۸۸ آذر ۰۴, ۰۷:۰۸ ب.ظ)zoghal نوشته: یک سوال شما ترانزکشن رو وری موتور myisam استفاده کردید یا موتور دیگه؟

myisam از تراکنش پشتیبانی نمیکنه

رضا جان منم از همین موضوع تعجب کردم. گفتم شاید. جدیدا ساپورت میکنه.
پس رو چه موتوری کار میکنید مهندس مخلصی؟
  پاسخ
تشکر شده توسط :
#10
البته من یه نکته رو بگم که دارم هنوز روی این ترانزاکشن کار میکنم
مسئله Rollback هنوز تو این سیستم انجام نشده.
من اگه مطمئن شم میتونم با try /catch رول بک کنم می کم که میشه
ولی هنوز هیچی قطعی نیست. یعنی ممکنه من تا حالا اشتباه کرده باشم. به من فرصت بدید لطفا Smile
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان