با سلام و احترام خدمت شما خوانندگان گرامی، در این قسمت می خواهیم constraint هایی به نام های CHECK و DEFAULT و INDEX را بررسی کنیم. این ها آخرین constraint هایی هستند که در زبان SQL وجود دارند.
CHECK
این محدودیت، اندازه ی مقداری را تعیین می کند که ما در ستون یک جدول قرار می دهیم. شما می توانید این محدودیت را روی یک ستون یا تمام ستون های جدول خود اعمال کنید. بگذارید نمونه ای از این محدودیت را به شما نشان دهم. در مثال زیر می خواهیم برای ستون Age (به معنی «سن») در جدول Persons محدودیتی تعیین کنیم که می گوید این ستون نمی تواند مقادیر زیر 18 را قبول کند (افراد نباید زیر 18 سال باشند):
برای MySQL:
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CHECK (Age>=18) );
برای SQL Server یا Oracle یا MS Access:
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int CHECK (Age>=18) );
اگر می خواهید CHECK روی چندین جدول اعمال شود از ساختار زیر برای تمام پایگاه های داده استفاده کنید:
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, City varchar(255), CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes') );
جدول های از پیش تعریف شده
تا اینجا کار این مثال ها برای ساخت جدول با محدودیت خاصی بود اما اگر می خواهید جدولی را که از قبل ساخته اید به این شکل ویرایش کنید باید به شکل زیر عمل کنید.
فرض کنید می خواهیم همان ستون Age را در جدولی از پیش تعریف شده تغییر دهیم:
برای MySQL یا SQL Server یا Oracle یا MS Access:
ALTER TABLE Persons ADD CHECK (Age>=18);
و برای اعمال روی چندین ستون مختلف:
ALTER TABLE Persons ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');
حذف CHECK
برای حذف این محدودیت باید از ساختار زیر استفاده کنید.
برای SQL Server یا Oracle یا MS Access:
ALTER TABLE Persons DROP CONSTRAINT CHK_PersonAge;
برای MySQL:
ALTER TABLE Persons DROP CHECK CHK_PersonAge;
DEFAULT
برای My SQL یا SQL Server یا Oracle یا MS Access:
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, City varchar(255) DEFAULT 'Sandnes' );
از دیگر استفاده های DEFAULT این است که می تواند مقادیر سیستمی مانند تاریخ را با استفاده از توابعی مانند ()GETDATE
وارد جدول شما کند:
CREATE TABLE Orders ( ID int NOT NULL, OrderNumber int NOT NULL, OrderDate date DEFAULT GETDATE() );
بنابراین می توانید به صورت خودکار زمان ثبت نام کاربر، زمان آپلود یک فایل و … را تعیین کنید بدون اینکه نیاز باشد دخالتی در عملیات ثبت آن داشته باشید.
جدول های از پیش تعریف شده
اگر جدول خود را از قبل ساخته اید و حالا می خواهید به آن مقدار پیش فرض بدهید باید از ساختار زیر استفاده کنید. به طور مثال می خواهم برای همان ستون City مقدار پیش فرض تعیین کنم:
برای MySQL:
ALTER TABLE Persons ALTER City SET DEFAULT 'Sandnes';
برای SQL Server:
ALTER TABLE Persons ADD CONSTRAINT df_City DEFAULT 'Sandnes' FOR City;
برای MS Access:
ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'Sandnes';
برای Oracle:
ALTER TABLE Persons MODIFY City DEFAULT 'Sandnes';
حذف DEFAULT
اگر از قبل برای جدول خود DEFAULT تعریف کرده اید اما دیگر نیازی به آن ندارید می توانید از ساختار زیر برای حذف آن استفاده کنید:
برای MySQL:
ALTER TABLE Persons ALTER City DROP DEFAULT;
برای SQL Server یا Oracle یا MS Access:
ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT;
CREATE INDEX
برای ایجاد index روی ستون خاصی از جدول باید طبق ساختار زیر عمل کنید:
CREATE INDEX index_name ON table_name (column1, column2, ...);
در این ساختار مقادیر تکراری نیز مورد قبول هستند. اگر دوست دارید مقادیر غیر تکراری و منحصر به فرد داشته باشید از ساختار زیر استفاده کنید:
CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);
هشدار: دستور ساختن index برای پایگاه داده های مختلف، متفاوت است بنابراین قبل از استفاده حتما دستور مربوط به پایگاه داده ی خود را چک کنید.
فرض کنید می خواهیم index ای بسازیم که idx_lastname نام دارد و روی ستون LastName از جدول Persons پیاده سازی می شود. در این صورت به این شکل عمل می کنید:
CREATE INDEX idx_lastname ON Persons (LastName);
اگر قصد دارید این کار را برای چندین ستون انجام دهید نیز باید بنویسید:
CREATE INDEX idx_pname ON Persons (LastName, FirstName);
حذف INDEX
برای حذف index از یک ستون و جدول می توانید از ساختار های زیر استفاده کنید:
برای MS Access:
DROP INDEX index_name ON table_name;
برای SQL Server:
DROP INDEX table_name.index_name;
برای DB2/Oracle:
DROP INDEX index_name;
برای MySQL:
ALTER TABLE table_name DROP INDEX index_name;
این ها آخرین موارد constraint ها بودند. در قسمت های آینده برخی از مباحث تکمیلی زبان SQL را ذکر کرده و دوره را به اتمام می رسانیم. امیدوارم این قسمت برایتان مفید بوده باشد.