با سلام و احترام خدمت شما خوانندگان گرامی، در این قسمت می خواهیم constraint هایی به نام های CHECK و DEFAULT و INDEX را بررسی کنیم. این ها آخرین constraint هایی هستند که در زبان SQL وجود دارند.
این محدودیت، اندازه ی مقداری را تعیین می کند که ما در ستون یک جدول قرار می دهیم. شما می توانید این محدودیت را روی یک ستون یا تمام ستون های جدول خود اعمال کنید. بگذارید نمونه ای از این محدودیت را به شما نشان دهم. در مثال زیر می خواهیم برای ستون 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');
برای حذف این محدودیت باید از ساختار زیر استفاده کنید.
برای SQL Server یا Oracle یا MS Access:
ALTER TABLE Persons DROP CONSTRAINT CHK_PersonAge;
برای MySQL:
ALTER TABLE Persons DROP CHECK CHK_PersonAge;
برای 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 تعریف کرده اید اما دیگر نیازی به آن ندارید می توانید از ساختار زیر برای حذف آن استفاده کنید:
برای MySQL:
ALTER TABLE Persons ALTER City DROP DEFAULT;
برای SQL Server یا Oracle یا MS Access:
ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT;
هشدار: بروزرسانی (update) جدولی که index داشته باشد بیشتر از جدولی که بدون index باشد طول می کشد. چرا؟ به دلیل اینکه index ها نیز باید آپدیت شوند بنابراین کارها تقریبا دو برابر می شود. به همین خاطر پیشنهاد می شود فقط در ستون هایی از 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 از یک ستون و جدول می توانید از ساختار های زیر استفاده کنید:
برای 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 را ذکر کرده و دوره را به اتمام می رسانیم. امیدوارم این قسمت برایتان مفید بوده باشد.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.