آموزش DUPLICATE KEY UPDATE در Mysql
- توسط : علی حسین شهابی
- 0 نظر
سلام دوستان عزیز
در این مقاله می خواهم به شما نشان بدهم چگونه در Mysql از قابلیت INSERT ON DUPLICATE KEY UPDATE استفاده کنید .این قابلیت به شما این امکان را می دهد, اگر رکورد جدیدی که ثبت می کنید تکراری باشد , به جای خطا, مقادیر را با مقادیر قبلی جایگزین کنید . فرض کنید شما یه جدول دارین شامل فیلدهای Id و Name . در این جدول رکورد ID=3 و Name=ali را درج کرده اید .. حالا دوباره رکورد Id=3 و Name=reza را درج می کنید .به دلیل اینکه فیلد ID کلید اصلی است و نمی تواند تکراری باشد قاعدتا به شما ارور می دهد و می گوید فیلد id=3 قبلا درج شده است و نمی تواند تکراری باشد .
وقتی شما از قابلیت INSERT ON DUPLICATE KEY UPDATE استفاده کنید , هنگامی که رکوردی تکراری درج کنید به جای اینکه به شما ارور تکراری بودن بدهد, مقادیر جدید را با مقادیر قبلی جایگزین می کند.
پس این قابلیت : رکورد جدید را تا جایی که تکراری نباشد ثبت می کند و اگر تکراری بود آن را آپدیت می کند .
سینتکس INSERT ON DUPLICATE KEY UPDATE همانند زیر است :
INSERT INTO table(column_list)
VALUES(value_list)
ON DUPLICATE KEY UPDATE column_1 = new_value_1, column_2 = new_value_2, …;
همانطور که مشاهده می کنید تنها چیزی که با دستور INSERT تفاوت دارد ON DUPLICATE KEY UPDATE است که به آن اضافه شده است .
مثال :
INSERT INTO sample_table(column_1)
VALUES(column_1)
ON DUPLICATE KEY UPDATE column_1 = VALUES(column_1) + 1;
در این مثال مقدار column_1 در جدول sample_table افزوده می شود و اگر مقدار آن تکراری بود (فیلد column_1 یا UNIQUE یا PRIMARY KEY بود ) , مقدار VALUES(column_1) + 1 را با مقدار قبلی جایگزین می کند .
حالا یه مثال بهتر بزنم که کامل متوجه داستان بشین :
فرض کنید یه جدول داریم به نام devices که network devices ها را ذخیره نماییم :
CREATE TABLE devices (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
حالا داخل جدول devices رکوردی را اضافه می کنیم :
INSERT INTO devices(name)
VALUES('Router F1'),('Switch 1'),('Switch 2');
با استفاده از کوئری SELECT داده ها را نمایش می دهیم :
SELECT
id, name
FROM
devices;
همانطور که مشاهده می کنید در حال حاضر ۳ رکورد در این جدول وجود دارد .
حالا با استفاده از دستور زیر یک رکورد دیگر اضافه می نماییم :
INSERT INTO devices(name) VALUES ('Printer')
ON DUPLICATE KEY UPDATE name = 'Printer';
این رکورد نیز با موفقیت اضافه شد و مشکلی نیست چون رکورد تکراری نبود .
حالا با استفاده از دستور زیر , یک رکورد تکراری به جدول اضافه می کنیم تا ببینیم چه اتفاقی می افتد :
INSERT INTO devices(id,name) VALUES (4,'Printer')
ON DUPLICATE KEY UPDATE name = 'Server';
در کد بالا با استفاده از ON DUPLICATE KEY UPDATE name = ‘Server’ گفتیم که اگر رکورد تکراری بود مقدار آن را با server آپدیت کن . به همین دلیل مقدار Printer با Server جایگزین می شود :
به پایان رسید . امیدوارم با مفهوم ON DUPLICATE KEY UPDATE در Mysql آشنا شده باشین و به وقتش در پروژه ها ازش استفاده کنید .
خب مقاله امروز هم به پایان رسید.خوشحال میشم مثل همیشه نظراتتون رو اعلام کنید.