SQL Constraints

در SQL از Constraints (محدودیت‌ها) برای کنترل نوع داده‌هایی که در جدول ذخیره می‌شوند استفاده می‌کنیم.
محدودیت‌ها باعث می‌شن داده‌ها معتبر، منظم و سازگار باقی بمونن.

🔹 انواع Constraints در SQL

نام محدودیتتوضیح
NOT NULLمقدار ستون نمی‌تونه خالی باشه.
UNIQUEمقدار هر سطر در این ستون باید یکتا باشه.
PRIMARY KEYهر رکورد را به‌صورت یکتا مشخص می‌کنه (ترکیبی از NOT NULL و UNIQUE).
FOREIGN KEYرابطه بین دو جدول را مشخص می‌کنه.
CHECKمقدار داده باید شرط خاصی را رعایت کنه.
DEFAULTمقدار پیش‌فرض برای ستون تعیین می‌کنه.

🔹 مثال: ایجاد جدول با Constraints

CREATE TABLE Students ( StudentID INT PRIMARY KEY, FullName VARCHAR(100) NOT NULL, Age INT CHECK (Age >= 18), Email VARCHAR(100) UNIQUE, City VARCHAR(50) DEFAULT 'Unknown' );

📌 توضیح:

  • StudentID → کلید اصلی (نباید تکراری یا خالی باشه)

  • FullName → نباید خالی باشه

  • Age → باید حداقل ۱۸ باشه

  • Email → مقدار تکراری نپذیره

  • City → اگر مقداری وارد نشه، 'Unknown' ثبت میشه

🔹 افزودن Constraint بعد از ساخت جدول

ALTER TABLE Students ADD CONSTRAINT chk_Age CHECK (Age >= 18);

📌 محدودیت chk_Age بعد از ساخت جدول اضافه می‌شود.

🔹 حذف Constraint

ALTER TABLE Students DROP CONSTRAINT chk_Age;

📌 محدودیت chk_Age از جدول حذف می‌شود.

🔹 توضیح مختصر هر نوع Constraint

✅ NOT NULL

مقدار ستون باید حتماً وارد شود.

FullName VARCHAR(100) NOT NULL

✅ UNIQUE

هیچ دو رکوردی نباید مقدار یکسان در ستون داشته باشند.

Email VARCHAR(100) UNIQUE

✅ PRIMARY KEY

هر رکورد را یکتا می‌کند (فقط یک کلید اصلی در هر جدول وجود دارد).

StudentID INT PRIMARY KEY

✅ FOREIGN KEY

ارتباط بین جداول را برقرار می‌کند.

FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)

✅ CHECK

مقدار باید از شرطی خاص پیروی کند.

Age INT CHECK (Age >= 18)

✅ DEFAULT

اگر مقداری وارد نشود، مقدار پیش‌فرض قرار می‌گیرد.

City VARCHAR(50) DEFAULT 'Unknown'

🔹 نکات مهم

  • Constraints در زمان درج (INSERT) یا ویرایش (UPDATE) داده‌ها بررسی می‌شن.

  • در SQL Server، MySQL و PostgreSQL همگی از این محدودیت‌ها پشتیبانی می‌کنند.

  • استفاده‌ی درست از محدودیت‌ها باعث میشه دیتابیس تمیز، پایدار و بدون داده‌ی نادرست باشه.