اینجا وقتی که یه چیزی رو تغییر میدیم میاد 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 کردن هم داره و میتونه پیدا کنه

SQL Server