Belirtilen koşullar karşılandığında yalnızca veri tablosundaki verileri güncellemek için koşullu güncelleme özelliğini kullanabilirsiniz. Koşullar karşılanmazsa güncelleme başarısız olur.
Önkoşullar
Bir OTSClient örneği başlatılmıştır. Daha fazla bilgi için bkz. OTSClient örneğini başlatma.
Bir veri tablosu oluşturulmuş ve bu tabloya veri yazılmıştır. Daha fazla bilgi için bkz. Veri tablosu oluşturma ve Veri yazma.
Kullanım notları
PutRow, UpdateRow, DeleteRow veya BatchWriteRow işlemini çağırarak verileri güncellerken satır varlık koşullarını ve sütun bazlı koşulları kontrol etmek için koşullu güncelleme kullanabilirsiniz. Güncelleme yalnızca belirtilen koşullar karşılandığında başarılı olur.
Koşullu güncelleme, satır varlık koşullarına ve sütun bazlı koşullara dayalı olarak uygulanabilir.
-
Satır varlık koşulları IGNORE, EXPECT_EXIST ve EXPECT_NOT_EXIST seçeneklerini içerir.
Bir veri tablosunu değiştirirken Tablestore öncelikle satır varlık koşulunu kontrol eder. Satır varlık koşulu karşılanmazsa değişiklik başarısız olur ve bir hata döndürülür.
-
Sütun bazlı koşullar, bir veya daha fazla sütunun değerlerine göre koşulların karşılanıp karşılanmadığını belirlemek için kullanılan SingleColumnCondition ve CompositeCondition türlerini içerir.
Sütun bazlı koşullar aşağıdaki ilişkisel operatörleri destekler: =, !=, >, >=, < ve <=. Ayrıca NOT, AND ve OR mantıksal operatörleri de kullanılabilir. Koşullu bir güncelleme için en fazla 10 sütun bazlı koşul belirtebilirsiniz.
SingleColumnCondition, bir sabit değer ile bir sütun arasındaki karşılaştırmayı destekler. İki sütun veya iki sabit değer arasındaki karşılaştırmaları desteklemez.
Mantıksal operatörler, CompositeCondition içindeki alt koşulları birleştirmek için kullanılır. Alt koşullar SingleColumnCondition veya CompositeCondition türünde olabilir.
İyimser kilitleme (optimistic locking) uygulamak için koşullu güncellemeyi kullanabilirsiniz. Bir satırı güncellerken belirli bir sütunun değerini almanız ve satır güncelleme koşulunu bu sütun değerine göre belirtmeniz gerekir. Örneğin, bir satırdaki A Sütunu değerini 2 olarak güncellemek istediğinizde önce A Sütununun mevcut değerini (örneğin 1) elde edin. Ardından, satırın yalnızca A Sütunu değeri 1 olduğunda güncellenebileceğini belirten bir koşul ekleyin. Belirtilen koşul karşılanırsa güncelleme başarılı olur. Ancak satır başka bir istemci tarafından güncellenmişse işlem başarısız olur.
Parametreler
|
Parametre |
Açıklama |
|
RowExistenceExpectation |
Satır varlık koşulu. Bir tabloyu değiştirirken Tablestore bu koşulu kontrol eder. Koşul karşılanmazsa değişiklik başarısız olur ve bir hata bildirilir. Satır varlık koşulları IGNORE, EXPECT_EXIST ve EXPECT_NOT_EXIST seçeneklerini içerir. Tablestore'da IGNORE belirtmek için RowExistenceExpectation_IGNORE, EXPECT_EXIST belirtmek için RowExistenceExpectation_EXPECT_EXIST ve EXPECT_NOT_EXIST belirtmek için RowExistenceExpectation_EXPECT_NOT_EXIST kullanılır.
|
|
columnName |
Sütun adı. |
|
columnValue |
Sütun için karşılaştırma değeri. |
|
comparator |
Sütun değerini karşılaştırmak için kullanılan ilişkisel operatör. İlişkisel operatör türleri hakkında bilgi için bkz. ComparatorType. İlişkisel operatörler EQUAL(=), NOT_EQUAL(!=), GREATER_THAN(>), GREATER_EQUAL(>=), LESS_THAN(<) ve LESS_EQUAL(<=) seçeneklerini içerir. Tablestore'da EQUAL(=) belirtmek için CT_EQUAL, NOT_EQUAL(!=) belirtmek için CT_NOT_EQUAL, GREATER_THAN(>) belirtmek için CT_GREATER_THAN, GREATER_EQUAL(>=) belirtmek için CT_GREATER_EQUAL, LESS_THAN(<) belirtmek için CT_LESS_THAN ve LESS_EQUAL(<=) belirtmek için CT_LESS_EQUAL kullanılır. |
|
combinator |
Birden çok koşulu birleştiren mantıksal operatör. Mantıksal operatör türleri hakkında bilgi için bkz. LogicalOperator. Mantıksal operatörler NOT, AND ve OR seçeneklerini içerir. Tablestore'da NOT belirtmek için LO_NOT, AND belirtmek için LO_AND ve OR belirtmek için LO_OR kullanılır. Belirtebileceğiniz alt koşul sayısı, kullandığınız mantıksal operatöre göre değişir.
|
|
passIfMissing |
Bir satırda sütun bulunmadığında koşullu kontrolün geçip geçmeyeceğini belirtir. Bu parametrenin değeri Boolean türündedir. Varsayılan değer true'dur; bu değer, sütun satırda mevcut değilse koşul kontrolünün geçtiğini ve satırın güncelleme koşullarını karşıladığını belirtir. passIfMissing parametresini false olarak ayarlarsanız ve sütun satırda mevcut değilse koşul kontrolü başarısız olur ve satır güncelleme koşullarını karşılamaz. |
|
latestVersionOnly |
Bir sütun birden fazla sürüm değere sahip olduğunda karşılaştırma için yalnızca en son sürümün kullanılıp kullanılmayacağını belirtir. Bu parametrenin değeri Boolean türündedir. Varsayılan değer true'dur; bu değer, sütun birden fazla sürüm değere sahipse karşılaştırma için yalnızca en son sürümün kullanıldığını belirtir. latestVersionOnly parametresini false olarak ayarlarsanız ve sütun birden fazla sürüm değere sahipse tüm sürüm değerleri karşılaştırmada kullanılır. Bu durumda, en az bir sürüm koşulu karşılarsa koşul kontrolü geçer ve satır güncelleme koşullarını karşılar. |
Örnekler
Belirtilen birincil anahtara dayalı olarak bir satırı güncelleyin. Belirtilen satır mevcutsa, "name" sütununun değeri "john" ve "addr" sütununun değeri "china" ise güncelleme başarılı olur. Aksi takdirde güncelleme başarısız olur.
var params = {
tableName: "sampleTable",
primaryKey: [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
updateOfAttributeColumns: [{ 'PUT': [{ 'col1': 'test6' }] }]
};
// Specify the update conditions. Specify that data can be updated only if the following conditions are met: the specified row exists, the value of the "name" column is "john", and the value of the "addr" column is "china".
var condition = new TableStore.CompositeCondition(TableStore.LogicalOperator.AND);
condition.addSubCondition(new TableStore.SingleColumnCondition('name', 'john', TableStore.ComparatorType.EQUAL));
condition.addSubCondition(new TableStore.SingleColumnCondition('addr', 'china', TableStore.ComparatorType.EQUAL));
params.condition = new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_EXIST, condition);
client.updateRow(params,
function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});