در MySQL، یکی از روشهای متداول برای مقداردهی خودکار ID (شناسهی منحصربهفرد هر رکورد) استفاده از ویژگی AUTO_INCREMENT است.
این ویژگی باعث میشود که مقدار ID بهصورت خودکار افزایش یابد و نیازی به مقداردهی دستی در هنگام درج رکوردهای جدید نباشد.
۱. مفهوم AUTO_INCREMENT در MySQL
AUTO_INCREMENT قابلیتی است که به یک ستون عددی اختصاص داده میشود تا مقادیر آن بهطور خودکار و منحصربهفرد برای هر رکورد جدید تولید شود. این ویژگی معمولاً برای ستون کلید اصلی (PRIMARY KEY) در جداول پایگاه داده استفاده میشود.
ویژگیهای AUTO_INCREMENT
- مقدار ID بهطور خودکار از ۱ شروع شده و با هر درج (INSERT) یک واحد افزایش مییابد.
- اگر یک رکورد حذف شود، مقدار ID آن بهصورت پیشفرض دوباره استفاده نمیشود، مگر اینکه بهطور دستی مقدار AUTO_INCREMENT تنظیم شود.
- مقدار اولیه را میتوان بهصورت سفارشی تعیین کرد.
- میتوان مقدار گام افزایش را تغییر داد.
۲. ایجاد جدول با AUTO_INCREMENT
برای مقداردهی خودکار ID در MySQL، هنگام ایجاد جدول باید AUTO_INCREMENT را در تعریف ستون مشخص کنیم. بهطور معمول، این ستون بهعنوان کلید اصلی (PRIMARY KEY) نیز تعریف میشود.
مثال: ایجاد جدول کاربران با ID خودکار
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
🔹 در این مثال، ستون id با نوع داده INT
و ویژگی AUTO_INCREMENT تعریف شده است.
🔹 مقدار این ستون در هنگام درج رکوردهای جدید بهصورت خودکار مقداردهی خواهد شد.
۳. درج داده در جدول AUTO_INCREMENT
هنگام درج داده در یک جدول دارای AUTO_INCREMENT، نیازی به مقداردهی دستی ID نداریم. مقدار آن بهطور خودکار اختصاص داده میشود.
مثال: درج چندین کاربر در جدول
INSERT INTO users (name, email) VALUES
('علیرضا یاسینی', 'alireza@example.com'),
('مهدی احمدی', 'mehdi@example.com');
🔹 مقدار ID بهطور خودکار مقداردهی میشود:
علیرضا یاسینی
مقدار ID=1 میگیرد.مهدی احمدی
مقدار ID=2 میگیرد.
۴. بررسی مقدار AUTO_INCREMENT در جدول
برای بررسی مقدار بعدی که در AUTO_INCREMENT استفاده خواهد شد، میتوان از دستور زیر استفاده کرد:
SHOW CREATE TABLE users;
یا میتوان مقدار فعلی AUTO_INCREMENT را بهطور مستقیم دریافت کرد:
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'users';
🔹 در اینجا، database_name نام پایگاه داده و users نام جدول است.
۵. تغییر مقدار شروع AUTO_INCREMENT
در صورت نیاز، میتوان مقدار اولیه AUTO_INCREMENT را تغییر داد. برای مثال، اگر بخواهیم مقدار اولیه ID از ۱۰۰ شروع شود:
ALTER TABLE users AUTO_INCREMENT = 100;
🔹 بعد از اجرای این دستور، اولین رکورد جدید مقدار ID=100 را دریافت خواهد کرد.
۶. تنظیم مقدار گام افزایش (Increment Step)
بهطور پیشفرض، مقدار AUTO_INCREMENT در هر بار درج ۱ واحد افزایش مییابد، اما میتوان مقدار گام افزایش را تغییر داد.
تنظیم مقدار گام افزایش (Increment Step)
SET @@auto_increment_increment = 5;
🔹 این مقدار باعث میشود که ID بهجای افزایش ۱ واحدی، در هر درج ۵ واحد افزایش یابد.
🔹 مثلاً اگر مقدار فعلی ID=1 باشد، مقدار بعدی ID=6 خواهد بود.
۷. بازیابی مقادیر حذفشده در AUTO_INCREMENT
در صورت حذف رکوردها، مقادیر ID بهطور خودکار بازنویسی نمیشوند. اما اگر بخواهید مقدار AUTO_INCREMENT را به کمترین مقدار موجود تنظیم کنید، میتوانید از این دستور استفاده کنید:
ALTER TABLE users AUTO_INCREMENT = 1;
🔹 این دستور فقط در صورتی کار میکند که همهی رکوردهای جدول حذف شده باشند. در غیر این صورت، مقدار بعدی ID برابر با بیشترین مقدار موجود خواهد بود.
۸. استفاده از UUID بهجای AUTO_INCREMENT
در برخی موارد، بهجای AUTO_INCREMENT، استفاده از UUID (شناسه یکتا جهانی) روش بهتری است، مخصوصاً در سیستمهای توزیعشده.
مثال: استفاده از UUID در MySQL
CREATE TABLE users (
id CHAR(36) PRIMARY KEY DEFAULT (UUID()),
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
🔹 مقدار ID در این حالت یک مقدار یکتای تصادفی خواهد بود که در همه سیستمها منحصربهفرد است.
نتیجهگیری
- مقداردهی خودکار ID در MySQL با استفاده از ویژگی AUTO_INCREMENT انجام میشود.
- این ویژگی معمولاً برای کلید اصلی (PRIMARY KEY) در جداول استفاده میشود.
- مقدار ID بهطور خودکار از مقدار ۱ شروع شده و با هر درج ۱ واحد افزایش مییابد (قابل تغییر).
- مقدار AUTO_INCREMENT را میتوان تنظیم یا تغییر داد.
- در سیستمهای توزیعشده، ممکن است استفاده از UUID جایگزین مناسبی برای AUTO_INCREMENT باشد.
💡 اگر قصد دارید شناسههای یکتا و غیرقابل پیشبینی ایجاد کنید، UUID گزینه بهتری است، اما اگر سادگی و خوانایی اولویت دارد، AUTO_INCREMENT مناسبتر خواهد بود.