DELETE + UPDATE দিয়ে ID রি-সিকোয়েন্স
যদি আপনি একটি রো ডিলিট করার পর বাকি রোয়ের ID সিকোয়েন্সিয়াল রাখতে চান (যেমন ১,২,৩,৪...), তবে ডিলিটের পর UPDATE দিয়ে বড় ID গুলো কমিয়ে আনুন।
সিনট্যাক্স
DELETE FROM yourTable WHERE id = target_id; UPDATE yourTable SET id = id - 1 WHERE id > target_id;
উদাহরণ
টেবিল তৈরি (বिना AUTO_INCREMENT)
mysql> create table ReorderSortDemo (
-> UserId int
-> );
Query OK, 0 rows affected (0.57 sec)
ডেটা ইনসার্ট (অक्रमিক ID)
mysql> insert into ReorderSortDemo values(14), (4), (6), (3), (8), (18), (1), (11), (16); Query OK, 9 rows affected (0.00 sec)
প্রাথমিক ডেটা
mysql> SELECT * FROM ReorderSortDemo;
আউটপুট
+--------+ | UserId | +--------+ | 14 | | 4 | | 6 | | 3 | | 8 | | 18 | | 1 | | 11 | | 16 | +--------+
UserId=8 ডিলিট
mysql> DELETE FROM ReorderSortDemo WHERE UserId = 8; Query OK, 1 row affected (0.20 sec)
ডিলিটের পর (৮ রো)
mysql> SELECT * FROM ReorderSortDemo;
আউটপুট
+--------+ | UserId | +--------+ | 14 | | 4 | | 6 | | 3 | | 18 | | 1 | | 11 | | 16 | +--------+
৮ থেকে বড় ID গুলো ১ করে কমান
mysql> UPDATE ReorderSortDemo SET UserId = UserId - 1 WHERE UserId > 8; Query OK, 4 rows affected (0.22 sec) Rows matched: 4 Changed: 4 Warnings: 0
ফাইনাল ডেটা
mysql> SELECT * FROM ReorderSortDemo;
আউটপুট
+--------+ | UserId | +--------+ | 13 | | 4 | | 6 | | 3 | | 17 | | 1 | | 10 | | 15 | +--------+
সতর্কতা: প্রোডাকশনে প্রাইমারি কি রি-অর্ডার করা বুদ্ধিমানের কাজ নয় (FK রিলেশন ভাঙতে পারে)। সাধারণত AUTO_INCREMENT গ্যাপ রাখা গ্রহণযোগ্য।