آموزش کامل دستور UPDATE در SQL
بهروزرسانی ردیفها در جدولهای بانک اطلاعاتی با استفاده از دستور UPDATE امکان پذیر است. استفاده از این دستور علاوه بر حالت ساده، حالتهای پیشرفتهتری هم دارد که میتواند اطلاعات را از محلهای مختلف فراخوانی کند و پس از پردازش در جدولهای مورد نظر ما ذخیره کند. در این آموزش حالتهای پرکاربرد دستور UPDATE را که سادهتر هستند بررسی میکنیم. برای یادگیری امکانات تخصصی، لازم است تا مستندات این دستور را به دقت مطالعه کنید و پیش از اجرای دستورات روی پایگاه دادهی اصلی، مهارت کافی را به دست آورید.
فراخوانید دستور UPDATE در حالت کلی به شکل زیر است:
1 2 3 |
UPDATE table SET column1 = value1, column2 = value2, ... WHERE condition; |
وارد کردن نام جدول و نام فیلد و مقدار جدید برای فیلد الزامی است. وارد کردن شرط بهروزرسانی هرچند الزامی نیست ولی اگر آن را وارد نکنید تمام ردیفهای جدول بهروزرسانی میشوند که احتمالا انتظار آن را نداشته باشید.
برای مثال کدهای زیر نام دانشآموز با شناسهی ۱۰ را به علی تغییر میدهد:
1 2 3 |
UPDATE students SET fname = 'علی' WHERE id = 10; |
اگر نام فیلدها دارای کلمات کلیدی باشند. با قرار دادن آنها در میان دو علامت backtick از رخداد مشکل جلوگیری میکنیم:
1 2 3 |
UPDATE students SET `from` = 'tehran' WHERE id = 10; |
با درج چند نام فیلد میتوانید چند ستون را به صورت همزمان بهروزرسانی کنید:
1 2 3 |
UPDATE students SET `fname` = 'علی', `lname` = 'پیروز' WHERE id = 10; |
اگر شرط شما حاوی ستونی باشد که مقدار یکتا ندارد، چندین ردیف را میتوانید به صورت همزمان بهروزرسانی کنید. برای مثال اگر بخواهیم نام شهر چندین کاربر را به فارسی تبدیل کنید، کدهای ما شبیه به مثال زیر خواهند بود:
1 2 3 |
UPDATE students SET `city` = 'تهران' WHERE city = 'Tehran'; |
یک بار دیگر یادآوری میشود که نوشتن شرط در UPDATE بسیار پر اهمیت است. با درج اشتباه شرط، ممکن است تعداد زیادی از ردیفها به صورت ناخواسته بهروزرسانی شوند.
بهروزرسانی بر اساس مقدار فیلدهای دیگر
در عبارت UPDATE میتوانید از مقدار فیلدهای دیگر برای بهروزرسانی یک فیلد دیگر یا همان فیلد استفاده کنید. برای مثال پس از یک سال میتوانیم سن تمام دانشآموزان را یک سال اضافه کنیم:
1 2 |
UPDATE students SET `age` = `age` + 1; |
دقت کنید که در این مثال، شرط وجود ندارد تا سن تمام دانشآموزان بهروزرسانی شود.
بهروزرسانی همزمان روی چند جدول
گاهی ممکن است بخواهید چند جدول را با یکدیگر JOIN کنید و بر اساس شرطی خاص، یکی از ستونهای این جدولها را بهروزرسانی کنید. برای مثال اگر بخواهیم شهر دانشآموزان را بر اساس شهر مدرسهای که در آن تحصیل میکنند بهروزرسانی کنیم، به شکل زیر عمل میکنیم.
فرض کنید دو جدول دانشآموزان و مدارس به شکل زیر هستند:
students | ||||
---|---|---|---|---|
id | school_id | fname | lname | city |
1 | 1 | علی | پیروز | |
2 | 2 | آرش | نامدار |
schools | ||
---|---|---|
id | name | city |
1 | دکتر حسابی | شیراز |
2 | فرزانگان | تهران |
1 2 3 4 |
UPDATE students SET students.city = schools.city FROM students join schools ON students.school_id = schools.id WHERE students.city = '' |
کدهای بالا نام شهر دانشآموزانی که شهر آنها خالی است را بر اساس شهر مدرسهای که در آن تحصیل میکنند، بهروزرسانی میکند. نتیجهی فراخوانی دستور بالا به صورت زیر خواهد بود:
students | ||||
---|---|---|---|---|
id | school_id | fname | lname | city |
1 | 1 | علی | پیروز | شیراز |
2 | 2 | آرش | نامدار | تهران |