پرش به محتوا

به روزرسانی ( 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 بندها ممکن است از یک بند شاخص در هم تنیده استفاده کنند .

منابع

[ویرایش]
  1. http://dev.mysql.com/doc/refman/5.0/en/update.html simplified from this page
  2. "UPDATE". January 2012.
  3. "SQL - Update a table column, then the other column with updated value of the former. MySQL / PostgreSQL differ".