به روزرسانی ( 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" است را روی 1 تنظیم کنید.
UPDATE T
SET C1 = 1
WHERE C2 = 'a'
در جدول T ، مقدار ستون C1 را 9 و مقدار C3 را 4 برای تمام ردیف هایی که مقدار ستون C2 که "a" است، تنظیم کنید.
UPDATE T
SET C1 = 9,
C3 = 4
WHERE C2 = 'a'
افزایش ارزش ستون C1 با 1 اگر مقدار در ستون 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 روی 2 قرار دهید، تنها در صورتی که مقدار ستون C2 در زیر لیست مقادیر ستون C3 در جدول T2 با ستون C4 برابر با 0 یافت شود.
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".