حل شده

آپدیت یک سطر در تیبلی که relationship دارد

بازدید1.1kپست ها1آخرین فعالیت3 سال پیش
2
1

سلام
یه سوال داشتم
من یه دیتابیس دارم که بین 2تا تیبل ریلیشن شیپ برقراره وقتی توی تیبل اول یه دیتایی ثبت کنم و به واسطه ریلیشن توی تیبل دوم دیتا ثبت میکنم آی دی تیبل اول توی تیبل دو ثبت میشه و وقتی بخوام توی تیبل اول دیتا رو حذف کنم پیام میده که اجازه حذف به دلیل استفاده آی دی در تیبل دوم وجود نداره
سوال من اینجاست چطوری میتونم کاری کنم که اون سطر از تیبل اول که در تیبل دوم استفاده شده نه تنها حذف نشه بلکه آپدیت هم نشه ؟
یعنی وقتی دستور آپدیت رو میزنم هم باز بگه چون استفاده شده اجازه ویرایش هم نداری!

آخرین ویرایش: 12-05-2020 ???? 02:02، توسط cnmeysam
سلام. خوب در اینصورت چرا اصلا ریلیشن تعریف کردید؟ – کیوان سمیعی 3 سال پیش
پس باید چیکار میکردم؟ میخوام هم آی دی سطر مورد نظرم توی تیبل دوم ثبت بشه هم بعد از استفاده توی تیبل دوم حذف و ویرایش نشه ولی اگه توی تیبل دوم استفاده نشد هم حذف بشه هم ویرایش ممکنه سطر تیبل اولم توی چند تیبل فراخوانی و استفاده شده باشه باید چیکار کنم پس؟ – cnmeysam 3 سال پیش

1 پاسخ

1

سلام.
پس تیبل اول تیبل مرجع هست و تیبل دوم چایلد که رفرنس براش تعریف میشه و شما میخواین وقتی آیدی توی تیبل دوم هست مقدار ش در تیبل اول غیر قابل تغییر باشه. برای اینکار میتونید از RESTRICT استفاده کنید برای تعریف رفرنس

CREATE TABLE child (
        id INT, 
        parent_id INT,
        INDEX par_ind (parent_id),
        FOREIGN KEY (parent_id) 
            REFERENCES parent(id)
            ON UPDATE RESTRICT ON DELETE RESTRICT
    )
ممنون ازجوابتون مشکل همینجاستمن 2 تا تیبل دارم یکی device و یکی deviceconsumption توی deviceconsumption ریلیشن آپدیت و دیلت ریستریک هست . دیلت انجام نمیشه که درسته ولی آپدیت انجام میشه که اشتباهه توی عکس ببینید لطفاhttp://uupload.ir/files/vygt_4.jpg – cnmeysam 3 سال پیش
DELETE FROM device WHERE id='1'; UPDATE device set DeviceName='ok' WHERE id='1'; – cnmeysam 3 سال پیش
حتی دیتابیس با کوئری شما هم ساختم باز هم عملیات حذف درست کار میکنه ولی عملیات آپدیت نه یعنی حذف نمیشه ولی آپدیت میشه – cnmeysam 3 سال پیش
در ضمن من مشکلم آپدیت نشدن آی دی نیست میخوام Name رو نشه ویرایش کرد دستور RESTRICT فقط روی فارنکی و آی دی اعمال میشه میخوام توی تیبل پرنت هیچ کدوم از فیلد ها ویراش نشه در صورت استفاده توی فرم دیگه – cnmeysam 3 سال پیش
ببینید شما وقتی کی تعریف میکنی برای اپدیت و دیلیت مثلا برای ادیدی توی چایلد، اپدیت شدن همون رو محدود میکنید نه کل فیلد های والد رو. نمیتونید از اپدیت شدن فیلدهای والد جلوگیری کنید. چرا با برنامه نویسی انجام نمیدید؟ – کیوان سمیعی 3 سال پیش

سوال برنامه نویسی دارید؟

ندونستن عیب نیست، نپرسیدن چرا!

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.