فهرست سرفصل‌های MySQL
خانه (HOME) مقدمه (Intro) پایگاه داده رابطه ای (RDBMS) SQL (SQL) SELECT (SELECT) WHERE (WHERE) عملگرهای AND, OR, NOT (AND, OR, NOT) مرتب سازی (ORDER BY) افزودن رکورد (INSERT INTO) مقادیر NULL (NULL Values) بروزرسانی (UPDATE) حذف (DELETE) محدودیت تعداد (LIMIT) کمینه و بیشینه (MIN and MAX) COUNT، AVG، SUM (COUNT, AVG, SUM) LIKE (LIKE) کاراکترهای عام (Wildcards) IN (IN) BETWEEN (BETWEEN) نام های مستعار (Aliases) اتصال ها (Joins) INNER JOIN (INNER JOIN) LEFT JOIN (LEFT JOIN) RIGHT JOIN (RIGHT JOIN) CROSS JOIN (CROSS JOIN) خود-اتصالی (Self Join) UNION (UNION) UNION ALL (UNION ALL) گروه بندی (GROUP BY) HAVING (HAVING) EXISTS (EXISTS) ANY و ALL (ANY, ALL) INSERT SELECT (INSERT SELECT) CASE (CASE) توابع Null (Null Functions) کامنت ها (Comments) عملگرها (Operators) ایجاد پایگاه داده (Create DB) حذف پایگاه داده (Drop DB) ایجاد جدول (Create Table) حذف جدول (Drop Table) تغییر جدول (Alter Table) قیود (Constraints) Not Null (Not Null) منحصر به فرد (Unique) کلید اصلی (Primary Key) کلید خارجی (Foreign Key) CHECK (Check) پیش فرض (Default) ایندکس (Create Index) افزایش خودکار (Auto Increment) تاریخ ها (Dates) نماها (Views) انواع داده (Data Types) توابع (MySQL Functions) ASCII (ASCII) CHAR_LENGTH (CHAR_LENGTH) CHARACTER_LENGTH (CHARACTER_LENGTH) CONCAT (CONCAT) CONCAT_WS (CONCAT_WS) FIELD (FIELD) FIND_IN_SET (FIND_IN_SET) FORMAT (FORMAT) INSERT (INSERT) INSTR (INSTR) LCASE (LCASE) LEFT (LEFT) LENGTH (LENGTH) LOCATE (LOCATE) LOWER (LOWER) LPAD (LPAD) LTRIM (LTRIM) MID (MID) POSITION (POSITION) REPEAT (REPEAT) REPLACE (REPLACE) REVERSE (REVERSE) RIGHT (RIGHT) RPAD (RPAD) RTRIM (RTRIM) SPACE (SPACE) STRCMP (STRCMP) SUBSTR (SUBSTR) SUBSTRING (SUBSTRING) SUBSTRING_INDEX (SUBSTRING_INDEX) TRIM (TRIM) UCASE (UCASE) UPPER (UPPER) ABS (ABS) ACOS (ACOS) ASIN (ASIN) ATAN (ATAN) ATAN2 (ATAN2) AVG (AVG) CEIL (CEIL) CEILING (CEILING) COS (COS) COT (COT) COUNT (COUNT) DEGREES (DEGREES) DIV (DIV) EXP (EXP) FLOOR (FLOOR) GREATEST (GREATEST) LEAST (LEAST) LN (LN) LOG (LOG) LOG10 (LOG10) LOG2 (LOG2) MAX (MAX) MIN (MIN) MOD (MOD) PI (PI) POW (POW) POWER (POWER) RADIANS (RADIANS) RAND (RAND) ROUND (ROUND) SIGN (SIGN) SIN (SIN) SQRT (SQRT) SUM (SUM) TAN (TAN) TRUNCATE (TRUNCATE) ADDDATE (ADDDATE) ADDTIME (ADDTIME) CURDATE (CURDATE) CURRENT_DATE (CURRENT_DATE) CURRENT_TIME (CURRENT_TIME) CURRENT_TIMESTAMP (CURRENT_TIMESTAMP) CURTIME (CURTIME) DATE (DATE) DATEDIFF (DATEDIFF) DATE_ADD (DATE_ADD) DATE_FORMAT (DATE_FORMAT) DATE_SUB (DATE_SUB) DAY (DAY) DAYNAME (DAYNAME) DAYOFMONTH (DAYOFMONTH) DAYOFWEEK (DAYOFWEEK) DAYOFYEAR (DAYOFYEAR) EXTRACT (EXTRACT) FROM_DAYS (FROM_DAYS) HOUR (HOUR) LAST_DAY (LAST_DAY) LOCALTIME (LOCALTIME) LOCALTIMESTAMP (LOCALTIMESTAMP) MAKEDATE (MAKEDATE) MAKETIME (MAKETIME) MICROSECOND (MICROSECOND) MINUTE (MINUTE) MONTH (MONTH) MONTHNAME (MONTHNAME) NOW (NOW) PERIOD_ADD (PERIOD_ADD) PERIOD_DIFF (PERIOD_DIFF) QUARTER (QUARTER) SECOND (SECOND) SEC_TO_TIME (SEC_TO_TIME) STR_TO_DATE (STR_TO_DATE) SUBDATE (SUBDATE) SUBTIME (SUBTIME) SYSDATE (SYSDATE) TIME (TIME) TIME_FORMAT (TIME_FORMAT) TIME_TO_SEC (TIME_TO_SEC) TIMEDIFF (TIMEDIFF) TIMESTAMP (TIMESTAMP) TO_DAYS (TO_DAYS) WEEK (WEEK) WEEKDAY (WEEKDAY) WEEKOFYEAR (WEEKOFYEAR) YEAR (YEAR) YEARWEEK (YEARWEEK) BIN (BIN) BINARY (BINARY) CASE (CASE) CAST (CAST) COALESCE (COALESCE) CONNECTION_ID (CONNECTION_ID) CONV (CONV) CONVERT (CONVERT) CURRENT_USER (CURRENT_USER) DATABASE (DATABASE) IF (IF) IFNULL (IFNULL) ISNULL (ISNULL) LAST_INSERT_ID (LAST_INSERT_ID) NULLIF (NULLIF) SESSION_USER (SESSION_USER) SYSTEM_USER (SYSTEM_USER) USER (USER) VERSION (VERSION) مثال ها (MySQL Examples) ویرایشگر (MySQL Editor) آزمون (MySQL Quiz) تمارین (MySQL Exercises) سرفصل (MySQL Syllabus) برنامه مطالعه (MySQL Study Plan) گواهینامه (MySQL Certificate)
نتیجه‌ای برای جستجو یافت نشد.
MySQL

MySQL — قیود (Constraints)

آخرین بروزرسانی: 1404/08/18

قیود (Constraints)

قیود MySQL یعنی قانون های جدول. «قید (Constraint)» قانونی است که جلوی داده اشتباه را می گیرد. با قید، داده دقیق تر می شود و خطا کمتر می شود.

انواع قیود MySQL

قید می تواند روی یک ستون باشد یا روی کل جدول. ستون سطح یعنی فقط همان ستون. جدول سطح یعنی برای چند ستون یا کل جدول.

  • NOT NULL: ستون خالی نشود.
  • UNIQUE: مقدارهای تکراری نداشته باشد.
  • PRIMARY KEY: ترکیب NOT NULL و UNIQUE برای شناسه یکتا.
  • FOREIGN KEY: ارتباط سالم بین جدول ها را نگه می دارد.
  • CHECK: مقدارها باید یک شرط را پاس کنند.
  • DEFAULT: مقدار پیش فرض می گذارد.
  • CREATE INDEX: بازیابی داده را سریع می کند.

نکته: اگر قید با عمل درج یا ویرایش تضاد داشته باشد، عمل انجام نمی شود.

ایجاد قید هنگام ساخت جدول (CREATE TABLE)

می توانی قیدها را همان اول با ساخت جدول تعریف کنی. مثل وقتی از اول قانون کلاس را می نویسیم.

CREATE TABLE students (
  student_id INT NOT NULL,
  email VARCHAR(255) UNIQUE,
  grade TINYINT CHECK (grade >= 0 AND grade <= 20),
  class_id INT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (student_id),
  FOREIGN KEY (class_id) REFERENCES classes(id)
);

مشاهده در ادیتور

افزودن قید پس از ساخت (ALTER TABLE)

بعداً هم می توانی قید اضافه کنی. مثل افزودن قانون جدید به دفتر کلاس.

ALTER TABLE students
  ADD CONSTRAINT uq_students_email UNIQUE (email);

مشاهده در ادیتور

ALTER TABLE students
  ADD CONSTRAINT pk_students PRIMARY KEY (student_id);

مشاهده در ادیتور

ALTER TABLE students
  ADD CONSTRAINT fk_students_class
  FOREIGN KEY (class_id) REFERENCES classes(id);

مشاهده در ادیتور

ALTER TABLE students
  ADD CONSTRAINT ck_students_grade CHECK (grade >= 0 AND grade <= 20);

مشاهده در ادیتور

نکات کاربردی درباره قیود MySQL

  • PRIMARY KEY معمولاً روی یک ستون است. اما می تواند مرکب باشد.
  • FOREIGN KEY بهتر است ایندکس داشته باشد. پرس وجو سریع تر می شود.
  • CHECK شرط را ساده بنویس. خوانایی خیلی مهم است.
  • DEFAULT برای مقدارهای معمول عالی است. خطاها را کم می کند.

هشدار: حذف یا تغییر قید می تواند درج های قبلی را تحت تأثیر بگذارد. همیشه پشتیبان بگیر.

برای مرور کامل، صفحه قیود MySQL راهنمای اصلی توست.

جمع بندی سریع

  • قید یعنی قانون برای داده.
  • ستون سطح یا جدول سطح است.
  • CREATE TABLE قیدها را از اول می گذارد.
  • ALTER TABLE قیدها را بعداً اضافه می کند.
  • هدف: دقت و یکپارچگی داده.