برنامه نویسی

به روز رسانی بازگشت قدیمی | جدید در YugabyteDB و PostgreSQL

ایده خوبی است که به‌جای تراکنش دو بیانیه با UPDATE و SELECT، UPDATE … RETURNING را ترجیح دهید. به طور پیش فرض، مقدار جدید برگردانده می شود. Oracle 23c امکان بازگرداندن مقادیر قدیمی را اضافه کرده است.

در اینجا نحوه انجام همین کار در YugabyteDB و PostgreSQL آمده است.

yugabyte=# create table demo (id bigint primary key, value text);
CREATE TABLE

yugabyte=# insert into demo 
           select generate_series(1,50), '...old...';
INSERT 0 50

yugabyte=# update demo set value='...new...' where id=42
           returning id, value;

 id |   value
----+-----------
 42 | ...new...
(1 row)

UPDATE 1

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا نحوه اجرای مشابه برای برگرداندن مقادیر قدیمی و جدید است:

yugabyte=# with old as (select * from demo where id=42)
           update demo new set value='...new...'
           from old where old.id=new.id
           returning new.id, old.value, new.value ;

 id | old_value | new_value
----+-----------+-----------
 42 | ...old... | ...new...

(1 row)

UPDATE 1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

عبارت WITH (که CTE برای بیان جدول مشترک نیز نامیده می شود) برای انجام چندین عملیات خواندن و نوشتن در یک دستور بسیار مفید است. مزیت اعلان منطق در یک دستور SQL، آن را کارآمدتر و مقیاس‌پذیرتر با کاهش رفت و برگشت، افزایش احتمال تکرار شفاف (مثلاً در شیب ساعت) و اجتناب از ناهنجاری‌ها حتی در سطح جداسازی متعهد خواندنی می‌کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا