Identity در SQL Server

شنبه 14 آذر 1394

identity در Sql Server از ویژگی های بسیار ساده و مفید است. اما بسیاری از توسعه دهندگان وب ان را به اشتباه تفسیر میکنند. Identity در sql server به عنوان فیلدی با قابلیت افزایش خودکار شناخته شده است.

Identity در SQL Server

identity در Sql Server از ویژگی های بسیار ساده و مفید است. اما بسیاری از توسعه دهندگان وب ان را به اشتباه تفسیر میکنند. Identity در sql server به عنوان فیلدی با قابلیت  افزایش خودکار  شناخته شده است. بیایید با یک مثال Identity را درک کنیم.

query برای ایجاد یک جدول

CREATE TABLE MyBlogs  
      (  
    BlogId          int IDENTITY(1,1) NOT NULL,   
    BlogTitle       nvarchar(255) NOT NULL,  
    BlogDescription nvarchar(1000) NOT NULL,  
    BlogDetails     NVARCHAR(MAX) NOT NULL,   
    IsPrimary       bit NOT NULL,  
    IsActive        bit NOT NULL  
    )

query برای افزودن data در جدول

insert into MyBlogs   
(BlogTitle, BlogDescription, BlogDetails,IsPrimary,IsActive)   
values   
('BlogTitle1', 'BlogDescription1' ,'BlogDetails1', 0, 1),  
('BlogTitle2', 'BlogDescription2' ,'BlogDetails2', 0, 1),  
('BlogTitle3', 'BlogDescription3' ,'BlogDetails3', 0, 1),  
('BlogTitle4', 'BlogDescription4' ,'BlogDetails4', 0, 1),  
('BlogTitle5', 'BlogDescription5' ,'BlogDetails5', 0, 1) 

query انتخاب تمام داده های جدول

select * from MyBlogs 

identity seed چیست؟

Identity Seed مقداری است که برای تصمیم گیری اولین مقدار از identity در جدول را مشخص میکند.

identity increment value چیست؟

مقدار افزایشی Identity می باشد. که به مقدار identity هر ردیف قبلی اضافه شده است.

ایا ما میتوانیم  از مقادیر منفی برای identity seed و مقدار increment استفاده کنیم؟

Identity Seed با عدد منفی

CREATE TABLE MyBlogs2  
   (  
    BlogId          int IDENTITY(-100,1) NOT NULL,    
    BlogTitle       nvarchar(255) NOT NULL,  
    BlogDescription nvarchar(1000) NOT NULL,  
    BlogDetails     NVARCHAR(MAX) NOT NULL,   
    IsPrimary       bit NOT NULL,  
    IsActive        bit NOT NULL  
    )   
  
  
insert into MyBlogs2   
(BlogTitle, BlogDescription, BlogDetails,IsPrimary,IsActive)   
values   
('BlogTitle1', 'BlogDescription1' ,'BlogDetails1', 0, 1),  
('BlogTitle2', 'BlogDescription2' ,'BlogDetails2', 0, 1),  
('BlogTitle3', 'BlogDescription3' ,'BlogDetails3', 0, 1),  
('BlogTitle4', 'BlogDescription4' ,'BlogDetails4', 0, 1),  
('BlogTitle5', 'BlogDescription5' ,'BlogDetails5', 0, 1)  
  
select * from MyBlogs2  

Identity Seed با عدد منفی و مقدار increment  منفی

CREATE TABLE MyBlogs3  
   (  
    BlogId          int IDENTITY(-1000,-5) NOT NULL,      
    BlogTitle       nvarchar(255) NOT NULL,  
    BlogDescription nvarchar(1000) NOT NULL,  
    BlogDetails     NVARCHAR(MAX) NOT NULL,   
    IsPrimary       bit NOT NULL,  
    IsActive        bit NOT NULL  
    )   
  
    insert into MyBlogs3   
(BlogTitle, BlogDescription, BlogDetails,IsPrimary,IsActive)   
values   
('BlogTitle1', 'BlogDescription1' ,'BlogDetails1', 0, 1),  
('BlogTitle2', 'BlogDescription2' ,'BlogDetails2', 0, 1),  
('BlogTitle3', 'BlogDescription3' ,'BlogDetails3', 0, 1),  
('BlogTitle4', 'BlogDescription4' ,'BlogDetails4', 0, 1),  
('BlogTitle5', 'BlogDescription5' ,'BlogDetails5', 0, 1)  
  
select * from MyBlogs3  

ایا ما میتوانیم هر مقدار مثبت دیگری برای Identity Increment و Identity seed قرار دهیم؟ بله

CREATE TABLE MyBlogs4  
   (  
    BlogId          int IDENTITY(5001,10) NOT NULL,   
    BlogTitle       nvarchar(255) NOT NULL,  
    BlogDescription nvarchar(1000) NOT NULL,  
    BlogDetails     NVARCHAR(MAX) NOT NULL,   
    IsPrimary       bit NOT NULL,  
    IsActive        bit NOT NULL  
    )   
  
    insert into MyBlogs4   
(BlogTitle, BlogDescription, BlogDetails,IsPrimary,IsActive)   
values   
('BlogTitle1', 'BlogDescription1' ,'BlogDetails1', 0, 1),  
('BlogTitle2', 'BlogDescription2' ,'BlogDetails2', 0, 1),  
('BlogTitle3', 'BlogDescription3' ,'BlogDetails3', 0, 1),  
('BlogTitle4', 'BlogDescription4' ,'BlogDetails4', 0, 1),  
('BlogTitle5', 'BlogDescription5' ,'BlogDetails5', 0, 1)  
  
select * from MyBlogs4

چه تفاوتی بین کلید identity و primery key میباشد؟

ما میتوانیم در همان ستون از کلید اصلی و identity استفاده کنیم.

BlogId int IDENTITY(5001,10) primary key NOT NULL  

اما اگر ما کلید اصلی و Identity را به صورت جداگانه در نظر بگیریم تفاوت های بین چند کلید اولیه و identity وجود خواهد داشت.

identity به صورت خودکار مقدار میگیرد در حالی که کاربر میتواند برای کلید اصلی مقدار دلخواه خود را وارد نماید. 

identity تنها میتواند مقدار عددی بگیرد در حالی کلید اصلی می تواند از انواع داده های دیگر استفاده نماید.

هر دو منحصر به فرد می باشند و در یک جدول تنها می توانند یک مقدار داشته باشند اما زمانی که کلید اصلی در یک جدول ایجاد می شود یک شاخص به طور خودکار ایجاد می شود. 

CREATETABLE MyBlogs5  
    (  
        BlogId intIDENTITY(5001, 10) primarykeyNOTNULL,  
        BlogTitle nvarchar(255) NOTNULL,  
    )  

می توانید مقدار Identify  را reseeded نمایید.

CREATE TABLE MyBlogs6  
   (          
    BlogTitle       nvarchar(255) NOT NULL,  
    BlogDescription nvarchar(1000) NOT NULL,  
    BlogDetails     NVARCHAR(MAX) NOT NULL,   
    IsPrimary       bit NOT NULL,  
    IsActive        bit NOT NULL  
    )   
  
    insert into MyBlogs6   
(BlogTitle, BlogDescription, BlogDetails,IsPrimary,IsActive)   
values   
('BlogTitle1', 'BlogDescription1' ,'BlogDetails1', 0, 1),  
('BlogTitle2', 'BlogDescription2' ,'BlogDetails2', 0, 1),  
('BlogTitle3', 'BlogDescription3' ,'BlogDetails3', 0, 1),  
('BlogTitle4', 'BlogDescription4' ,'BlogDetails4', 0, 1),  
('BlogTitle5', 'BlogDescription5' ,'BlogDetails5', 0, 1)  
  
select * from MyBlogs6  

در حال حاضر کلید Identity را در جدول اضافه نمایید

ALTERTABLE MyBlogs6 ADDBlogIdINTIDENTITY(500, 5);  
select * from MyBlogs6 

ایا ما میتوانیم تنظیمات identity را برای یک جدول مشخص کنیم در حالی که ایجاد یک جدول با استفاده از  wizard انجام شده باشد؟ بله

 

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید