بهروزرسانی (SQL)
دستور بهروزرسانی (SQL (UPDATE دادههای یک یا چند مدرک را در یک جدول تغییر میدهد. به شکلی که بتوان یا همه ردیفها را بهروزرسانی کرد، یا ممکن است یک زیرمجموعه با استفاده از یک شرط گزیده شود.
UPDATE
به صورت زیر میباشد:[۱]
UPDATE
table_name SET
column_name = value [, column_name = value ...] [WHERE
condition]
برای موفقیتآمیز بودن UPDATE
، کاربر باید امتیازات دستکاری دادهها (امتیاز UPDATE
) را در جدول یا ستون داشته باشد و مقدار بهروزشده لازم است که با هیچیک از محدودیتهای قابل اجرا (مانند کلیدهای اصلی، فهرستهای منحصربهفرد، محدودیتهای CHECK
و محدودیتهایی که تهی نیستند، یعنی NOT NULL
) تضاد نداشته باشد.
در برخی از پایگاههای داده، مانند PostgreSQL، زمانی که یک عبارت FROM وجود دارد، آنچه در اصل اتفاق میافتد این است که جدول هدف به جداول آوردهشده در فهرست از لیست ملحق میشود و هر سطر خروجی از join یک عملیات بهروزرسانی برای جدول هدف را به نمایش میگذارد. در زمان استفاده از FROM، باید اطمینان حاصل شود که join حداکثر یک ردیف خروجی برای هر ردیفی که نیاز به اصلاح دارد، تولید میکند. به عبارتی دیگر، یک ردیف هدف نباید به بیش از یک ردیف از جدول (های) دیگر اتصال پیدا کند. اگر این پیوند اتفاق بیفتد، تنها یکی از ردیفهای پیوندشده برای بهروزرسانی ردیف هدف مورداستفاده قرار میگیرد، اما اینکه کدامیک استفاده میشود را بهآسانی نمیتوان پیشبینی کرد.[۲]
به دلیل این بلاتکلیفی، ارجاع دادن به جداول دیگر فقط در انتخابهای فرعی ایمنی بیشتری دارد، اگرچه خواندن آن معمولاً سختتر و کندتر از استفاده از join است.
MySQL با استاندارد ANSI تطابق ندارد.[۳]
مثالها
[ویرایش]مقدار ستون C1 در جدول T را فقط در ردیفهایی که مقدار ستون C2 که "a" است را روی ۱ تنظیم کنید.
UPDATE T
SET C1 = 1
WHERE C2 = 'a'
در جدول T، مقدار ستون C1 را ۹ و مقدار C3 را ۴ برای تمام ردیفهایی که مقدار ستون C2 که "a" است، تنظیم کنید.
UPDATE T
SET C1 = 9,
C3 = 4
WHERE C2 = 'a'
افزایش ارزش ستون C1 با ۱ اگر مقدار در ستون C2 که "a"است.
UPDATE T
SET C1 = C1 + 1
WHERE C2 = 'a'
مقدار C1 را در ستون C1 با رشته " text " وصل کنید اگر مقدار در ستون C2 که "a"است.
UPDATE T
SET C1 = 'text' || C1
WHERE C2 = 'a'
مقدار ستون C1 را در جدول T1 روی ۲ قرار دهید، تنها در صورتی که مقدار ستون C2 در زیر لیست مقادیر ستون C3 در جدول T2 با ستون C4 برابر با ۰ یافت شود.
UPDATE T1
SET C1 = 2
WHERE C2 IN ( SELECT C3
FROM T2
WHERE C4 = 0)
همچنین میتوان چندین ستون را در یک دستور update بهروز کرد:
UPDATE T
SET C1 = 1,
C2 = 2
شرایط پیچیده و پیوستن نیز امکانپذیر است:
UPDATE T
SET A = 1
WHERE C1 = 1
AND C2 = 2
برخی از پایگاههای داده اجازه استفاده غیر استاندارد از بند FROM را میدهند:
UPDATE a
SET a.[updated_column] = updatevalue
FROM articles a
JOIN classification c
ON a.articleID = c.articleID
WHERE c.classID = 1
یا در سیستمهای اوراکل (با فرض اینکه یک شاخص در طبقهبندی وجود دارد.articleID):
UPDATE
(
SELECT *
FROM articles
JOIN classification
ON articles.articleID = classification.articleID
WHERE classification.classID = 1
)
SET [updated_column] = updatevalue
با نام طولانی جدول:
UPDATE MyMainTable AS a
SET a.LName = Smith
WHERE a.PeopleID = 1235
مسائل بالقوه
[ویرایش]مشکل هالووین ببینید. برای انواع خاصی از update
اظهارات برای تبدیل شدن به یک حلقه بینهایت وقتی که where
بند و یک یا چند set بندها ممکن است از یک بند شاخص در هم تنیده استفاده کنند.
منابع
[ویرایش]- ↑ http://dev.mysql.com/doc/refman/5.0/en/update.html simplified from this page
- ↑ "UPDATE". January 2012.
- ↑ "SQL - Update a table column, then the other column with updated value of the former. MySQL / PostgreSQL differ".