اینجا وقتی که یه چیزی رو تغییر میدیم میاد script اش رو برامون مینویسه ، بعد این اسکریپت ها رو به ترتیب که تغییرات رو اعمال کردیم در جایی ذخیره میکنیم با تاریخ و زمان برای این که بعدا اگر خواستیم آپدیت انجام بدیم ازشون استفاده کنیم
برای اکتیو کردین این صفحه باید از این مسیر بریم :
خوب حالا میخوایم x0 رو اضافه کنیم
یا میایم با insert column اون بالا اضافه اش میکنیم
دستور inset into
حالا نکته ای که وجود داره اینه که وقتی که میخوایم یه فیلد جدید رو اون وسط اضافه کنیم باید اول یه جدول دیگه ساخته بشه و بعد تمامی اطلاعات جدول بره با اون فیلد جدیده بره توی اون جدول جدیده و بعد اعمال انتقال کامل انجام بشه و جدول قبلی کامل drop بشه و بعد این جدول جدیده اسمش تغییر کنه به اسم اون جدول قدیمی و اولیه
این عملیات خیلی خطرناکه و توی محیط transaction انجام میشه
برای همین گفته میشه که توی نوشتن جای این که فیلد جدید کجا اضافه بشه وسواس نداشته باشیم
چون در موقعق که بیایم فیلد جدید رو در آخر اضافه کنیم این اتفاق نمیوفته
چرا چون در این حالت میاد در هارد به اون قسمتی که هست این فیلد رو در آخرش اضافه میکنیم ولی در حالتی قبلی باید باید اون وسط فضای اون قسمت اختصاص داده شده به جدول باید بیاد اعمال کنه
اگر این تیک رو فعال کنیم جلوی اون کاری که بخوایم اون وسط فیلیدی رو اضافه کنیم رو میگیره
میرسیم به قسمت constrains که میشد قیود و محدود کننده ها که 6 تا هستند اولیش میشه primery key هستش دومیش foreign key هستش سومش میشه check چهارمی unique پنجمی allow null ششمی default
کوئری نام سهیل — خطا کوئری سهیل مونسی — خطا ممکنه چندین تا از این اسم و فامیل داشته باشیم برای همین نیاز به کلید اصلی داریم که مقدارش null نباشه و uniqe باشه
حالا میایم از این محدود کننده ها استفاده میکنیم که مقدار اون فیلد uniqe باشه و null نباشه
برای ست کردن
کلید میاد کنارش و allow null هم غیر فعال میشه
اگر بخوایم تکراری وارد کنیم ارور میده
یک column اطلاعاتی یا ترکیبی از چند تا column اطلاعاتی بیایم و یک کلید اطلاعاتی بسازیم ماکزیمم این ترکیب میشه 16 تا در گذشته میومدن شماره اسم فامیل شماره شناسنامه نام پدر محل تولد همه اینا رو با هم ترکیب میکردن ولی وقتی که کد ملی اومد که برای همه uniqe بود دیگه یکی primery key داریم
اینطوری باید با گرفتن و select کردن با control بیایم دو تا کلید اصلی در نظر بگیریم
این جا چون هر دوتا شخص مشخصاتشون کاملا در دوتا column که به عنوان کلید اصلی تعیین کردیم یکسان هستش و ارور میده و در بالا اینطور نیست
کد پستی ، شماره تلفن چون قابل خرید و فروشه نمیشه به عنوان کلید اصلی ازش استفاده کنیم
خوب حالا میرسیم به کلید خارجی : primery key های این جدول هستند که در جدوال دیگه ازش استفاده میشه
اینجا معلوم نیست که لستان فارس چقدر جمعیت داره
راه حل :
قوانین refenrial integrity role حق حذف پدری که فرزند داره رو ندارم - حق افزودن فرزند با کد پدر نامشخص رو نداریم
حق افزودن فرزند با کد پدر null رو داریم در صورتی که foregn key قابلیت allow null رو داشته باشه
حق آپدیت کردن کد پدر رو نداریم با cascade امکان پذیره
برای کلید خارجی میایم ترکیب اسم اون جدول ها رو میزاریم باید ملید خارجی و کلید اصلی باید از یک جنس باشند یعنی int باشن هر دو
خوب forgin key و releshenship در Sql هم معنی هستن
بعضی از اوقات به خاطر یه شرایط خاص ممکنه که کلید اصلی و کلید خارجی رو نیایم ست کنیم و بعد بیایم به صورت منطقی از این خاصیت که دارن برای روابط بین جدول ها استفاده کنیم
حالا اگر دو تا داشتیم
به تعداد فیلد هایی که در جدول پدر primery key در نظر گرفتیم باید در جدول فزرند به همون تعداد فیلد داشته باشیم
اینجا میتوینم 2 تا کد 1 داشته باشیم چون 2 تا premiry key داریم که جلوتر میایم و فقط یکی رو در نظر میگیریم
نمیتونیم حذفش کنیم قانون 1
چون اینجا tehran در جدول پدر هستش و ازش در جدول فرزند داره ازش استفاده میشه و ما نمیتونیم دیتایی که داره در جدول های دیگه استفاده میشه رو پاک کنیم
خوب قانون سوم داره میگه که حق افزودن فرزند با کد پدر نامشخص رو نداریم و اینجا همونطوری که میبینیم ارور میگیریم چون که اصلا state code و state name در جدول پدر وجود نداره برای همین ارور میگیریم
ولی میتونیم null بدیم
یدونه ای کردیم
برای این که جدول های رو در کنار هم بزاریم
خوب
اینجا برای مواقعی هستش که وسط پروژه میخوایم foregin key رو اضافه کنیم
اگر اون دیتا داخلش دیتا خراب باشه یعنی به طور مثال اطلاعات اون جدول کد پدر نامشخص داشته باشه و …
اگر فعالش کنیم میره کل دیتاش رو چک میکنه حتی اگر یه دونه هم دیتا خراب داشته باشه اجازه ست کردن foregn key رو نمیده
اگر هم نه کاری نداره و انجامش میده
برای نگهداری دیتا میتونیم از replication استفاده کنیم ، دو تا سیستم داریم که یدونه دیتا بیس داریم و شب به شب دیتای سیستم اول میره توی سیستم دوم با استفاده از replication خوب نکته ای که وجود داره اینه که همه ی جداول تغییر نمیکنه مثلا مثل جدول استان ها ، چون همیشه ثابت هستن ولی در مورد خاص مثل جداشدن استان البرز اگر yes باشه اولویت رو به refecial integrity میده یعنی اگر تمام اطلاعات درست نباشه نمیزاره انجام بشه ولی اگر no باشه این عملیات انجام میشه و اولویت با replication هست ولی ممکنه اطلاعات انتقالی توش خطا وجود داشته باشه
خوب این قابلیت برای این هستش که میخوایم یه دیتایی رو مثلا از اکسل به دیتابیس انتقال بدیم اینجا رو اول no میدیم و بعد میریم و بعدش اگر خواستیم yes اش میکنیم
نکته ای که وجود داره در حالت no باید check existing data on create هم no باشه
مثلا میخوایم یه دیتایی که بلاتکلیفه رو بهش یه چیزی Assign کنیم مثلا میدیم کد سایر و بعدا میریم درستش میکنیم
اگر no action باشه نمیزاره که دیتا حذف بشه اگر cascade باشه به صورت آبشاری دیتا ها رو حذف میکنه یعنی اینطوری که اگر tehran رو حذف کنیم تمام دیتاهایی که بهش وصله هم پاک میشه
این در جاهایی مثل فاکتور فروش در سوپر مارکتی ها استفاده میشه ، مثلا فاکتور صادر شده توش یه سری آیتم ها هستن حالا فرض کنید که مشتری پول نداشته باشه و اینجا فروشنده میزنه و تمام فاکتور رو پاک میکنه خوب set default : اگر میخوای دیتایی رو حذف کنیم میایم به جاش یه مقدار از پیش قرار داده شده درش قرار داده میشه حالت بعدی هم null هستش
موارد بعدی برای update هستش : توی آپدیت اگر روی default باشه وقتی که تغییرش بدیم و درست نباشه مقدار دیفالت میگیره
اسم خوب دادن به این دلیله که توی اون اروره بهمون نشون میده
ارور دیتا تایپ هستش چون دیتا تایپمون 255 تا بیشتر نمیتونه بگیره ولی ما 256 دادیم
این که ما چک کردن ها رو در هم لایه برنامه و هم لایه دیتابیس انجام بدیم بهتره چون ممکنه از چند مدل برنامه با کد های مختلف بخوان با دیتا بیس کار کنن
خوب uniqe constrans میتونه یدونه مقدار null بگیره !
این همون constrans default هستش
این هم allow null هم میشه constran
یه دونه from داریم توی هر select
از اینجا به بعد همیش optinal باشه یدونه from میتونیم بینهایت join داشته باشیم فیلتر در قسمت where condition هندل میشه مثلا فیلتر کردن بر اساس جنسیت ، سن و… قسمت group by رو داریم مثلا جدول واریزی داریم که کد ملی و واریزی داریم
اگر بخوایم بر اساس کد ملی دسته بندی کنیم و بعد بیایم روی colmn وایزی sum بزنیم
خوب قسمت having condition در group by ها استفاده میشه حالا اینجا اینطوری ازش استفاده میشه که مثلا اونهایی رو میخوایم که مجموع واریزیشون بیشتر از یه مقداری باشه
شروع بر روی aggrigate function در داخل having condition کنترل میشه
خوب sort کردن هم داریم
یک جدول رو میتونیم بر اساس فقط یک فیلد sort کنم
احمد احمد
احمد برزویی
اول بر اساس نام sort میشه و فیلد های بعدیش هم همینطوری یعنی بعدیش که فامیلی هست هم sort میشه
اون ریال هم یک کاراکتره اگر اسم جلال رو به صورت اولی نوشته باشیم ولی به صورت دومی سرچ کنیم coalation قابلیت compare کردن هم داره و میتونه پیدا کنه