AUTO INCREMENT و تاریخ در زبان SQL

AUTO INCREMENT and DATETIME in sql

0 407

با سلام و احترام خدمت شما همراهان گرامی روکسو، در این قسمت از سری آموزشی زبان SQL می خواهیم در رابطه با دو مبحث دیگر صحبت کنیم:

  • بحث فیلد های AUTO_INCREMENT یا فیلدهای افزایش خودکار
  • بحث ایجاد و دسترسی به Date یا تاریخ در SQL

AUTO_INCREMENT

Auto-increment در لغت به معنای «افزایش خودکار» است. Auto-increment در پایگاه داده، به ازای وارد شدن هر ردیف جدید در جدول، عددی غیر تکراری و خاص را برای آن می سازد. اکثر اوقات این قابلیت را روی ستونی قرار می دهیم که primary key ما را داشته باشد تا برای هر ردیف جدید یک primary key خاص تولید شود.

در MySQL

مثال زیر ستون Personid را به عنوان ستونی انتخاب می کند که یک primary key از نوع auto-increment باشد:

همانطور که می بینید برای ایجاد فیلد افزایش خودکار در MySQL باید از کلیدواژه ی AUTO_INCREMENT استفاده کنیم. مقدار اولیه ی هر ستون AUTO_INCREMENT به طور پیش فرض 1 است و برای هر ردیف تازه یک واحد به آن اضافه می کند (بنابراین می شود 1، 2، 3، 4، 5، و …). اگر بخواهید مقدار اولیه ی آن از 1 نباشد می توانید از این ساختار استفاده کنید:

حالا برای ایجاد یک ردیف جدید در جدول Persons دیگر نیازی نداریم که مقدار Personid را به صورت دستی تعیین کنیم. چرا؟ به دلیل اینکه با افزایش خودکار یک مقدار جدید برایش ساخته می شود:

در SQL Server

اگر بخواهیم همان مثال قبلی را در SQL Server پیاده کنیم (تعیین ستون Personid به عنوان ستون افزایش خودکار) باید از این ساختار تبعیت کنیم:

همانطور که می بینید برای ایجاد فیلد افزایش خودکار در SQL Server باید از کلیدواژه ی IDENTITY استفاده کنیم. مقدار اولیه ی هر ستون  IDENTITY به طور پیش فرض 1 است و برای هر ردیف تازه یک واحد به آن اضافه می کند (بنابراین می شود 1، 2، 3، 4، 5، و …).

اگر بخواهید مقدار اولیه ی آن از 10 شروع شده و 5 واحد 5 واحد، اضافه شود می توانید از این ساختار استفاده کنید:

همچنین دیگر نیازی به وارد کردن مقدار دستی برای IDENTITY نیست بنابراین برای اضافه کردن یک ردیف جدید می توانیم بگوییم:

در Access

پیاده سازی مثال قبلی (تعیین Personid به عنوان فیلد افزایش خودکار) در Access به این شکل است:

همانطور که می بینید برای تعیین فیلد افزایش خودکار در MS Access باید از کلیدواژه ی AUTOINCREMENT استفاده کنیم. دقیقا مانند دو پایگاه داده ی قبلی، مقدار اولیه ی AUTOINCREMENT عدد 1 است و برای هر ردیف جدید 1 واحد 1 واحد، اضافه می شود.

برای آنکه مقدار اولیه از 10 شروع شود و 5 واحد 5 واحد، اضافه شود می توانیم از (AUTOINCREMENT(10,5 استفاده کنیم و خیالمان نیز از بابت تعیین مقدار دستی راحت باشد:

در Oracle

ایجاد فیلد افزایش خودکار در Oracle کمی پیچیده تر از پایگاه های داده ی دیگر است؛ شما باید ابتدا یک فیلد افزایش خودکار ساخته و سپس یک شیء sequence نیز ایجاد کنید (sequence object یک سری خاص از اعداد را می سازد). حالا می توانیم از ساختار زیر استفاده کنیم:

در مثال بالا ابتدا seq_person را ساخته ایم که یک شیء sequence است و مقدار اولیه ی 1 را دارد. همچنین دستور CACHE می گوید چند مقدار (عدد) در حافظه ذخیره شوند (مقادیری که در حافظه ذخیره شوند سریعتر قابل دسترسی خواهند بود). در کد بالا:

  • MINVALUE 1: یعنی کمترین مقدار 1 باشد.
  • START WITH 1: یعنی از عدد 1 شروع کن. با تغییر این قسمت می توانید مقدار اولیه را تغییر دهید.
  • INCREMENT BY 1: یعنی 1 واحد 1 واحد اضافه کن.
  • CACHE 10: یعنی تا 10 عدد در حافظه ذخیره شوند.

برای اضافه کردن یک ردیف در این پایگاه داده باید از تابع nextval استفاده کنیم. کار این تابع دریافت مقدار بعدی از شیء seq_person است:

Date یا تاریخ

بسیاری از برنامه نویسان کار با تاریخ را کمی پیچیده تر از دیگر قسمت های پایگاه داده می دانند. در واقع سخت ترین قسمت کار با تاریخ این است که مطمئن شوید قالب تاریخی که در جدول هایتان وارد می کنید با قالب تاریخی که برای ستون های جدول تعیین کرده اید یکی باشند. البته تا زمانی که کارمان فقط با تاریخ باشد نباید زیادی نگران شویم اما اگر زمان نیز وارد موضوع شود کار کمی پیچیده تر خواهد شد.

نوع داده ی date در پایگاه های داده

  • برای MySQL باید طبق این قالب عمل کنید:
    • DATE – format YYYY-MM-DD
    • DATETIME – format: YYYY-MM-DD HH:MI:SS
    • TIMESTAMP – format: YYYY-MM-DD HH:MI:SS
    • YEAR – format YYYY or YY
  • اما برای SQL Server این قالب معتبر است:
    • DATE – format YYYY-MM-DD
    • DATETIME – format: YYYY-MM-DD HH:MI:SS
    • SMALLDATETIME – format: YYYY-MM-DD HH:MI:SS
    • TIMESTAMP – format: a unique number

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

کار با تاریخ در SQL

فرض کنید که جدول Orders را به این شکل داشته باشیم:

OrderDate ProductName OrderId
2008-11-11 Geitost 1
2008-11-09 Camembert Pierrot 2
2008-11-11 Mozzarella di Giovanni 3
2008-10-29 Mascarpone Fabioli 4

حالا می خواهیم سفارشاتی انتخاب کنیم که تاریخ “11-11-2008” را داشته باشند. برای این کار دستور زیر را می نویسیم:

خروجی ما به این شکل خواهد بود:

OrderDate ProductName OrderId
2008-11-11 Geitost 1
2008-11-11 Mozzarella di Giovanni 3

حالا تصور کنید که جدول Orders به این شکل باشد:

OrderDate ProductName OrderId
2008-11-11 13:23:44 Geitost 1
2008-11-09 15:45:21 Camembert Pierrot 2
2008-11-11 11:12:01 Mozzarella di Giovanni 3
2008-10-29 14:56:59 Mascarpone Fabioli 4

اگر از همان دستور بالا استفاده کنیم و بگوییم:

هیچ نتیجه ای به ما نشان داده نخواهد شد. چرا؟ به دلیل اینکه کوئری ما دنبال تاریخی می گردد که زمان نداشته باشد اما در جدول بالا تمام تاریخ ها همراه زمان هستند. برای حل این مشکل دو راه حل وجود دارد:

  • کوئری های خود را طبق قالب هایی که بالاتر گفته شد بنویسید و یک بار آن ها را تست کنید.
  • زمان را در ستون تاریخ قرار ندهید؛ یا به طور کل زمان را ذخیره نکنید و یا آن را در یک ستون جداگانه قرار دهید که البته کارتان را کمی سخت می کند.

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

ترتیبی که روکسو برای یادگیری مطالب سری آموزش زبان SQL به شما توصیه می‌کند:

ارسال نظر

توجه:‌ آدرس ایمیل شما منتشر نخواهد شد.

mezitli escort
mezitli escort
mezitli escort