Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ALTER TABLE ... UPDATE

ALTER TABLE [db.]table [ON CLUSTER cluster] UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_expr

يُعدِّل البيانات المطابقة لتعبير التصفية المحدد. وهو مُنفَّذ على شكل عملية التعديل.

يجب أن يكون filter_expr من النوع UInt8. يحدّث هذا الاستعلام قيم الأعمدة المحددة إلى قيم التعبيرات المقابلة في الصفوف التي تكون فيها قيمة filter_expr غير صفرية. تُحوَّل القيم إلى نوع العمود باستخدام العامل CAST. لا يُدعم تحديث الأعمدة المستخدمة في حساب المفتاح الأساسي أو مفتاح التقسيم.

يمكن أن يحتوي الاستعلام الواحد على عدة أوامر مفصولة بفواصل.

يُحدَّد تزامن معالجة الاستعلام بواسطة الإعداد mutations_sync. وهو غير متزامن افتراضيًا.

انظر أيضًا

الأعمدة المُجسَّدة

إذا كان تعبير عمود MATERIALIZED يقرأ عمودًا مُحدَّثًا، تُعيد عملية التعديل حسابه، بحيث تظل قيمته المخزنة متسقة مع البيانات الجديدة.

الأعمدة المحسوبة من أعمدة EPHEMERAL

لا يوجد العمود EPHEMERAL إلا طوال مدة عملية INSERT ولا يُخزَّن مطلقًا، لذلك لا يمكن لعملية تعديل إعادة حساب عمود MATERIALIZED محسوب منه. ويحتفظ هذا العمود بالقيمة المحسوبة وقت تنفيذ INSERT، التي لا تعود بعد ذلك مطابقة لتعبيره:

CREATE TABLE test
(
    x Int32,
    e Int32 EPHEMERAL 0,
    m Int32 MATERIALIZED x + e
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO test (x, e) VALUES (1, 7);

ALTER TABLE test UPDATE x = 2 WHERE 1;

SELECT x, m FROM test;
┌─x─┬─m─┐
│ 2 │ 8 │
└───┴───┘

m تساوي 8، وهي القيمة المحسوبة أثناء INSERT، وليست 2 + 7: فقيمة e غير متاحة خارج عملية INSERT التي زوّدتها بها. تسجّل عملية التعديل تحذيرًا في سجل الخادم عند تخطي عمود لهذا السبب. لتحديث هذا العمود، أعد تنفيذ INSERT للصفوف المتأثرة.

Navigation