استفاده از دنباله ها در MySQL — راهنمای جامع

۱۲۳ بازدید
آخرین به‌روزرسانی: ۲۱ شهریور ۱۴۰۲
زمان مطالعه: ۳ دقیقه
استفاده از دنباله ها در MySQL — راهنمای جامع

در MySQL دنباله به مجموعه‌ای از اعداد صحیح 1، 2، 3، ... گفته می‌شود که به ترتیب برای درخواست مشخصی ایجاد شده‌اند. دنباله‌ها به طور مکرر در پایگاه داده مورد استفاده قرار می‌گیرند، زیرا اپلیکیشن‌های زیادی نیازمند این هستند که هر ردیف در یک جدول شامل یک مقدار یکتا باشد و دنباله‌ها روشی آسان برای تولید چنین مقادیری ارائه می‌کنند. در این بخش از سلسله مطالب راهنمای MySQL به معرفی شیوه استفاده از دنباله‌ها در MySQL می‌پردازیم.

استفاده از ستون AUTO_INCREMENT

در MySQL ساده‌ترین روش برای استفاده از دنباله‌ها، تعریف یک ستون به صورت AUTO_INCREMENT است. بدین ترتیب MySQL، خود وظیفه افزایش شماره ردیف‌ها با درج رکوردهای جدید را بر عهده می‌گیرد.

مثال

در مثال زیر یک جدول ایجاد می‌شود و پس از آن چند ردیف در جدول درج می‌شود که برای آن‌ها لازم نیست ID رکورد معین شود، چون ID آن‌ها از سوی MySQL به صورت خودکار افزایش می‌یابند.

mysql> CREATE TABLE insect
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO insect (id,name,date,origin) VALUES
   -> (NULL,'housefly','2001-09-10','kitchen'),
   -> (NULL,'millipede','2001-09-10','driveway'),
   -> (NULL,'grasshopper','2001-09-10','front yard');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+-------------+------------+------------+
| id |    name     |    date    |   origin   |
+----+-------------+------------+------------+
|  1 |  housefly   | 2001-09-10 |   kitchen  |
|  2 |  millipede  | 2001-09-10 |  driveway  |
|  3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

به دست آوردن مقادیر AUTO_INCREMENT

تابع ()LAST_INSERT_ID در SQL را می‌توان روی هر کلاینتی که بتواند عبارت‌های SQL صادر کند، استفاده کرد. همچنین اسکریپت‌های PERL و PHP تابع‌های اختصاصی برای بازیابی مقدار AUTO_INCREMENT یک رکورد ارائه کرده‌اند.

مثال PERL

می‌توان از خصوصیت mysql_insertid برای به دست آوردن مقدار AUTO_INCREMENT تولید شده از سوی کوئری استفاده کرد. این خصوصیت بسته به این که کوئری چگونه ارسال شده باشد، از طریق یک دستگیره پایگاه داده (handle) یا یک دستگیره عبارت به دست می‌آید.

در مثال زیر از طریق دستگیره پایگاه داده این مقدار مورد ارجاع قرار می‌گیرد:

$dbh->do ("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};

مثال PHP

پس از صدور کوئری که یک مقدار AUTO_INCREMENT تولید می‌کند، می‌توان مقدار آن را با استفاده از دستور ()mysql_insert_id بازیابی کرد:

mysql_query ("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);

شماره‌گذاری مجدد یک دنباله موجود

در برخی موارد لازم است که رکوردهای زیادی را از یک جدول پاک کنیم و در این صورت لازم می‌شود که دنباله رکوردها را مجدداً ایجاد کنیم. این کار از طریق یک ترفند ساده امکان‌پذیر است؛ اما در صورتی که جدول شما با جدول‌های دیگر JOIN شده باشد، باید در این خصوص هوشیار باشید. اگر به این نتیجه رسیدید که تولید مجدد دنباله یک ستون AUTO_INCREMENT ناگزیر است، روش کار بدین صورت است که آن ستون را از جدل حذف کنید و سپس آن را مجدداً اضافه نمایید.

در مثال زیر روش شماره‌گذاری مجدد id values در جدول با استفاده از این تکنیک نمایش یافته است:

mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

آغاز یک دنباله از یک مقدار مشخص

MySQL به طور پیش‌فرض دنباله‌ها را از 1 آغاز می‌کند؛ اما می‌توان یک عدد خاص را در هنگام ایجاد جدول تعیین کرد که دنباله‌ها از آن عدد شروع شوند. در قطعه کد زیر یک مثال ارائه شده که نشان می‌دهد MySQL چگونه دنباله این جدول را از 100 آغاز می‌کند.

mysql> CREATE TABLE insect
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);

روش جایگزین این است که جدولی ایجاد کنید و سپس مقدار آغازین دنباله را در دستور ALTER TABLE تعیین کنید.

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
tutorialspoint
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *