با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره آموزش کامل SQL را دنبال می کنند. در اکثر جداولی که در یک پایگاه داده در SQL ایجاد کرده اید، شما احساس می کنید که به یک فیلد شمارنده نیاز دارید. که با افزودن هر رکورد به جدول، یک واحد به فیلد شمارنده اضافه گردد. یا حتی در زمانیکه می خواهید برای جدولی یک کلید اصلی تعریف کنید. اما فیلدی با مقادیر منحصر به فرد در جدول ندارید. می توانید یک فیلد شمارنده را به جدول اضافه کنید، و آن را به عنوان کلید اصلی جدول، تعریف کنید. در ادامه ی این آموزش شما را با ویژگی AUTO INCREMENT در SQL و ساختار تعریف AUTO INCREMENT در SQL ، برای ایجاد یک فیلد شمارنده، آشنا خواهیم کرد.
تعریف ویژگی AUTO INCREMENT روی یک فیلد در SQL، آن فیلد را به یک شمارنده تبدیل می کند.
به این ترتیب،با افزودن هر رکوردی به جدولی که فیلد شمارنده دارد. یک واحد به شمارنده اضافه می گردد.
فیلد شمارنده یکی از گزینه های مناسب برای تعریف به عنوان کلید اصلی است، چراکه مقادیر یکتا دارد.
مثال:
ایجاد جدولی با نام “Persons” که فیلد “ID” آن دارای ویژگی auto-increment است. و در پایان به عنوان کلید اصلی نیز تعریف شده است:
1 2 3 4 5 6 7 | CREATE TABLE Persons ( ID int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, PRIMARY KEY (ID) ); |
MySQL از کلمه کلیدی AUTO_INCREMENT برای تعریف ویژگی شمارنده در یک فیلد، استفاده می کند.
AUTO_INCREMENT بصورت پیش فرض از ۱ شروع می کند و با افزودن هر رکوردی به جدول، یک واحد به شمارنده اضافه می کند.
شما می توانید مانند مثال زیر، عدد شروع شمارش را در AUTO_INCREMENT خودتان تعیین کنید:
1 | ALTER TABLE Persons AUTO_INCREMENT=100; |
در مثال جدول “Persons”، دیگر نیازی نیست در زمان افزودن رکورد جدیدی به جدول، برای فیلد “ID” مقداری تعریف کنید:
1 2 | INSERT INTO Persons (FirstName,LastName) VALUES ('Lars','Monsen'); |
در مثال فوق برای فیلدهای FirstName و LastName مقداری اختصاص یافته و مقدار فیلد “ID” بطور خودکار شمارش می شود.
مثال:
تعریف ویژگی auto-increment و کلید اصلی برای فیلد “ID” در جدول “Persons”:
1 2 3 4 5 6 | CREATE TABLE Persons ( ID int IDENTITY(1,1) PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int ); |
SQL Server از دستور IDENTITY برای تعریف ویژگی auto-increment روی فیلدها استفاده می کند.
مثال بالا شروع شمارش برای فیلد “ID” را از ۱ تعیین می کند. و مشخص می کند برای هر رکوردی یک واحد اضافه شود.
شما می توانید شروع شمارش و تعداد واحد شمارش به ازای هر رکورد را مانند نمونه زیر تغییر دهید:
برای شروع شمارش از ۱۰ و به ازای هر رکورد اضافه شدن ۵ واحد به شمارنده : (IDENTITY(10,5
اکنون برای افزودن رکورد جدید به جدول Persons دیگر نیازی به تخصیص مقداری برای فیلد “ID” نیست:
1 2 | INSERT INTO Persons (FirstName,LastName) VALUES ('Lars','Monsen'); |
مثال بالا رکورد جدیدی را به جدول “Persons” تخصیص می دهد. و برای فیلد “ID” مقداری تخصیص نمی دهد.
برای فیلد FirstName مقدار “Lars” و برای فیلد LastName مقدار “Monsen” تعریف شده و فیلد “ID” از شمارنده مقدار می گیرد.
مثال:
تعریف ویژگی auto-increment و کلید اصلی برای فیلد “ID” در جدول “Persons”:
1 2 3 4 5 6 | CREATE TABLE Persons ( ID Integer PRIMARY KEY AUTOINCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int ); |
Access از دستور AUTOINCREMENT برای تعریف ویژگی auto-increment روی فیلدها استفاده می کند.
مثال بالا شروع شمارش برای فیلد “ID” را از ۱ تعیین می کند. و مشخص می کند برای هر رکوردی یک واحد اضافه شود.
شما می توانید شروع شمارش و تعداد واحد شمارش به ازای هر رکورد را مانند نمونه زیر تغییر دهید:
برای شروع شمارش از ۱۰ و به ازای هر رکورد اضافه شدن ۵ واحد به شمارنده :(AUTOINCREMENT(10,5
اکنون برای افزودن رکورد جدید به جدول Persons دیگر نیازی به تخصیص مقداری برای فیلد “ID” نیست:
1 2 | INSERT INTO Persons (FirstName,LastName) VALUES ('Lars','Monsen'); |
مثال بالا رکورد جدیدی را به جدول “Persons” تخصیص می دهد. و برای فیلد “ID” مقداری تخصیص نمی دهد.
برای فیلد FirstName مقدار “Lars” و برای فیلد LastName مقدار “Monsen” تعریف شده و فیلد “ID” از شمارنده مقدار می گیرد.
در Oracle کدها کمی پیچیده تر است.
در Oracle از دستور CREATE SEQUENCE برای تعریف ویژگی auto-increment روی یک فیلد، استفاده می شود:
1 2 3 4 5 | CREATE SEQUENCE seq_person MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10; |
کد بالا یک آبجکت شمارنده با نام seq_person ایجاد می کند که شروع شمارش از ۱ بوده و با افزودن هر رکورد، یک واحد اضافه می کند.
همچنین تعیین شده که تا ۱۰ شمارش انجام شده و مجددا از سر گرفته شود.
گزینه cache،درواقع مشخص می کند که چند مقدار توالی در حافظه برای دسترسی سریع تر ذخیره شود.
در افزودن رکورد جدیدی به جدول نیز، باید از تابع nextval استفاده شود:
1 2 | INSERT INTO Persons (ID,FirstName,LastName) VALUES (seq_person.nextval,'Lars','Monsen'); |
مثال بالا، رکورد جدیدی را به جدول “Persons” اضافه می کند، و فیلد “ID” را نیز،قبلا، به عنوان شمارنده با نام seq_person تعریف کردیم.
با افزودن ویژگی شمارنده به جداول، رکوردهای موجود در جدول از نظم خاصی برخوردار خواهند بود، و مهمتر اینکه یک فیلد با مقادیر منحصر به فرد، برای تعریف به عنوان کلید اصلی جدول خواهید داشت. امیدواریم که از مباحث ویژگی AUTO INCREMENT در SQL ، نهایت استفاده را برده باشید.
Sahar
وقتی روی گزینه auto increment میزنم پنجره ای باز میشه بنام add index، و وقتی گزینه go رو میزنم جدولی که دارم میسازم اصلا سیو نمیشه. اینجا باید چکار کنم؟؟