با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش MySQL را دنبال می کنند. توالی ها یا sequence در MySQL ، مجموعه ای از اعداد صحیح ۱، ۲، ۳، … هستند که به منظور تقاضاهای خاصی تولید می شوند. توالی ها اغلب در پایگاه های داده استفاده می شوند، زیرا بسیاری از برنامه ها نیاز به هر ردیف در یک جدول برای داشتن یک مقدار منحصر به فرد دارند و توالی ها در MySQL یک راه آسان برای تولید آنها می باشند. برای آشنایی با چگونگی کار با توالی ها در MySQL ، در ادامه ی این مباحث با ما همراه باشید.
در ادامه ی این آموزش شما را با چگونگی کار با sequence در MySQL آشنا خواهیم کرد.
ساده ترین راه استفاده از توالی ها در MySQL ، تعریف یک ستون از نوع AUTO_INCREMENT می باشد.
مثال-۱
در مثال زیر جدولی با تعدادی ستون ایجاد شده و سپس تعداد رکورد به آن اضافه می شود.
در این جدول نیازی به وارد کردن مقدار فیلد ID نیست، چرا که مقدار آن به صورت خودکار در هر رکورد افزایش می یابد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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) |
( ) LAST_INSERT_ID یک تابع SQL است، بنابراین شما می توانید از آن در هر client که شامل دستورات SQL است، استفاده کنید.
تابع فوق به منظور دریافت آخرین مقدار فیلد AUTO_INCREMENT کاربرد دارد.
از صفت mysql_insertid برای گرفتن مقدار AUTO_INCREMENT که با یک query تولید شده استفاده می کنیم.
این صفت در دسته دیتابیس و یا دسته ای از دستورات قابل دسترسی است.
مثال زیر آن را از طریق دسته دیتابیس ارجاع می دهد:
1 2 3 | $dbh->do ("INSERT INTO insect (name,date,origin) VALUES('moth','2001-09-14','windowsill')"); my $seq = $dbh->{mysql_insertid}; |
بعد از صدور یک پرس و جو که یک مقدار AUTO_INCREMENT تولید می کند، فراخوانی دستور () mysql_insert_id آن مقدار را بازیابی می کند:
1 2 3 | mysql_query ("INSERT INTO insect (name,date,origin) VALUES('moth','2001-09-14','windowsill')", $conn_id); $seq = mysql_insert_id ($conn_id); |
فرض کنید موردی پیش آمده که شما تمام رکوردهای یک جدول را حذف کرده اید و می خواهید مجددا توالی تمام رکوردها را دنبال کنید.
این کار با یک ترفند ساده انجام می شود اما در صورت ترکیب جدول شما با یک جدول دیگر کمی مشکل تر است.
اگر تشخیص داده اید که تعویض مجدد یک ستون AUTO_INCREMENT اجتناب ناپذیر است، یک راه حل این است که این ستون را از جدول حذف کرده و مجددا آن را اضافه کنید.
مثال زیر نشان می دهد که چگونه مقادیر id در جدول را با استفاده از این تکنیک مجددا شماره گذاری کنید:
1 2 3 4 | mysql> ALTER TABLE insect DROP id; mysql> ALTER TABLE insect -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, -> ADD PRIMARY KEY (id); |
در حالت پیش فرض MySQL یک توالی را از ۱ شروع می کند.
شما می توانید هر شماره دیگری نیز در زمان ایجاد جدول، مشخص کنید.
برنامه ی زیر یک مثال است که نشان می دهد چگونه MySQL توالی را از ۱۰۰ شروع کند :
1 2 3 4 5 6 7 8 | 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 مقدار sequence را تنظیم کنید:
1 | mysql> ALTER TABLE t AUTO_INCREMENT = 100; |
با استفاده از توالی ها در MySQL شما به راحتی می توانید یک ستون شمارنده ی خودکار به جدول اضافه کنید که با هر رکورد جدیدی که به جدول اضافه می شود یک واحد به فیلد شمارنده به طور خودکار اضافه گردد، در واقع کاربرد عمده ی sequence در MySQL ایجاد فلید شمارنده ی خودکار برای جداول است.