日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

條件更新

只有當數據滿足列判斷條件時,才能對數據表中的數據進行更新;當數據不滿足列判斷條件時,數據更新失敗。

前提條件

使用方法

在通過PutRowUpdateRowDeleteRowBatchWriteRow接口操作表中數據時,您可以使用條件更新檢查行存在性條件和列條件。只有當數據滿足列判斷條件時,才能對數據表中的數據進行更新。

條件更新中的列判斷條件包括列條件和行存在性條件。

  • 列條件

    目前支持SingleColumnValueConditionCompositeColumnValueCondition,是基于某一列或者某些列的列值進行條件判斷,與過濾器Filter中的條件類似。

    列條件中支持使用關系運算(=、!=、>、>=、<、<=)和邏輯運算(NOT、AND、OR),單個更新條件中最多支持設置10個列條件。

    • SingleColumnValueCondition支持一列和一個常量比較。不支持兩列或者兩個常量相比較。

    • CompositeColumnValueCondition的內節點為邏輯運算,子條件可以是SingleColumnValueConditionCompositeColumnValueCondition。

  • 行存在性條件

    對數據表進行更改操作時,系統會先檢查行存在性條件,如果不滿足行存在性條件,則更改失敗并給用戶報錯。

    行存在性條件包括IGNORE(忽略)、EXPECT_EXIST(期望存在)和EXPECT_NOT_EXIST(期望不存在)三種類型。

參數

條件更新可以用于PutRow、UpdateRow、DeleteRowBatchWriteRowcondition中。

    'condition' => [
        'row_existence' => <RowExistenceExpectation>
        'column_condition' => <ColumnCondition>
    ]   

當只有行存在性條件時,可以簡寫為如下結構。

    'condition' => <RowExistenceExpectation>    

SingleColumnValueConditionCompositeColumnValueFilter結構如下。

SingleColumnValueCondition結構

    [
        'column_name' => '<string>',
        'value' => <ColumnValue>,
        'comparator' => <ComparatorType>,
        'pass_if_missing' => true || false,
        'latest_version_only' => true || false
    ]

CompositeColumnValueFilter結構

    [
        'logical_operator' => <LogicalOperator>
        'sub_conditions' => [
            <ColumnCondition>,
            <ColumnCondition>,
            <ColumnCondition>,
            // other conditions
        ]
    ]

參數

說明

row_existence

對數據表進行更改操作時,系統會先檢查行存在性條件,如果不滿足行存在性條件,則更改失敗并給用戶報錯。

行存在性條件包括IGNORE、EXPECT_EXISTEXPECT_NOT_EXIST,分別用RowExistenceExpectationConst::CONST_IGNORE、RowExistenceExpectationConst::CONST_EXPECT_EXIST、RowExistenceExpectationConst::CONST_EXPECT_NOT_EXIST表示。

  • IGNORE:表示忽略,不做任何存在性檢查。

  • EXPECT_EXIST:表示期望存在,如果該行存在,則滿足條件;如果該行不存在,則不滿足條件。

  • EXPECT_NOT_EXIST:期望行不存在,如果該行不存在,則滿足條件;如果該行存在,則不滿足條件。

column_name

列的名稱。

value

列的對比值。

格式為[Value, Type]。Type可以是INTEGER、STRING(UTF-8編碼字符串)、BINARY、BOOLEAN、DOUBLE五種,分別用ColumnTypeConst::CONST_INTEGER、ColumnTypeConst::CONST_STRING、ColumnTypeConst::CONST_BINARY、ColumnTypeConst::CONST_BOOLEAN、ColumnTypeConst::CONST_DOUBLE表示,其中BINARY不可省略,其他類型均可省略。

Type不是BINARY時,可以簡寫為Value。

comparator

對列值進行比較的關系運算符,類型詳情請參見ComparatorType

關系運算符包括EQUAL(=)、NOT_EQUAL(!=)、GREATER_THAN(>)、GREATER_EQUAL(>=)、LESS_THAN(<)和LESS_EQUAL(<=),分別用ComparatorTypeConst::CONST_EQUAL、ComparatorTypeConst::CONST_NOT_EQUAL、ComparatorTypeConst::CONST_GREATER_THAN、ComparatorTypeConst::CONST_GREATER_EQUAL、ComparatorTypeConst::CONST_LESS_THAN、ComparatorTypeConst::CONST_LESS_EQUAL表示。

logical_operator

對多個條件進行組合的邏輯運算符,類型詳情請參見LogicalOperator

邏輯運算符包括NOT、ANDOR,分別用LogicalOperatorConst::CONST_NOT、LogicalOperatorConst::CONST_AND、LogicalOperatorConst::CONST_OR表示。

邏輯運算符不同可以添加的子條件個數不同。

  • 當邏輯運算符為NOT時,只能添加一個子條件。

  • 當邏輯運算符為ANDOR時,必須至少添加兩個子條件。

pass_if_missing

當列在某行中不存在時,條件檢查是否通過。類型為bool值,默認值為true,表示如果列在某行中不存在時,則條件檢查通過,該行滿足更新條件。

當設置pass_if_missingfalse時,如果列在某行中不存在時,則條件檢查不通過,該行不滿足更新條件。

latest_version_only

當列存在多個版本的數據時,是否只使用最新版本的值做比較。類型為bool值,默認值為true,表示如果列存在多個版本的數據時,則只使用該列最新版本的值進行比較。

當設置latest_version_onlyfalse時,如果列存在多個版本的數據時,則會使用該列的所有版本的值進行比較,此時只要有一個版本的值滿足條件,就條件檢查通過,該行滿足更新條件。

示例

根據行存在性條件操作數據

以下示例用于根據指定主鍵操作一行數據,如果指定的行存在,則操作成功,否則操作失敗。

$request = array (
    'tables' => array (
        array (
            'table_name' => '<My_Table>',
            'rows' => array (  
                array (
                    //PUT操作
                    'operation_type' => OperationTypeConst::CONST_PUT,
                    //期望行不存在,如果該行不存在,則滿足條件。
                    'condition' => RowExistenceExpectationConst::CONST_EXPECT_NOT_EXIST,
                    'primary_key' => array (
                        array('PK1', 'PrimaryKey'),
                        array('PK2', 11),
                    ),
                    'attribute_columns' => array (
                        array('attr1', 'Tablestore'),
                        array('attr2', 128)
                    )
                ),

                array (
                    //UPDATE操作
                    'operation_type' => OperationTypeConst::CONST_UPDATE,
                    //期望行存在,如果該行存在,則滿足條件。
                    'condition' => RowExistenceExpectationConst::CONST_EXPECT_EXIST,
                    'primary_key' => array (
                        array('PK1', 'PrimaryKey'),
                        array('PK2', 22),
                    ),
                    'update_of_attribute_columns'=> array(
                        'PUT' => array (
                            array('attr1', 'OTS'),
                            array('attr2',  256)
                        )
                    )
                ),
                
                array (
                    //DELETE操作
                    'operation_type' => OperationTypeConst::CONST_DELETE, 
                    //忽略,不做任何存在性檢查。
                    'condition' => RowExistenceExpectationConst::CONST_IGNORE,
                    'primary_key' => array (
                        array('PK1', 'PrimaryKey'),
                        array('PK2', 33),
                    )
                ),
            )
        )
    )
);

$response = $otsClient->batchWriteRow ($request);

// 處理返回的每個表
foreach ($response['tables'] as $tableData) {
    print "Handling table {$tableData['table_name']} ...\n";
    
    // 處理這個表下的PutRow返回的結果
    $putRows = $tableData['rows'];
    
    foreach ($putRows as $rowData) {
      
      if ($rowData['is_ok']) {
        // 寫入成功
        print "Capacity Unit Consumed: {$rowData['consumed']['capacity_unit']['write']}\n";
      } else {
        // 處理出錯
        print "Error: {$rowData['error']['code']} {$rowData['error']['message']}\n";
      }
    }
  }

根據行條件和列條件操作數據

以下示例用于根據行條件和列條件操作數據。

$request = array (
    'tables' => array (
        array (
            'table_name' => 'MyTable',
            'rows' => array (  
                //SingleColumnValueCondition結構
                  array (
                    //UPDATE操作
                    'operation_type' => OperationTypeConst::CONST_UPDATE,
                    'condition' => array (
                        'row_existence' => RowExistenceExpectationConst::CONST_EXPECT_EXIST,
                        //attr2 != 256
                        'column_condition' => array (
                            'column_name' => 'attr2',
                            'value' => 256,
                            'comparator' => ComparatorTypeConst::CONST_NOT_EQUAL
                        )
                    ),
                    'primary_key' => array (
                        array('PK1', 'PrimaryKey'),
                        array('PK2', 11)
                    ),
                    // 用 attribute_columns/put 指定要更新或者追加的列,
                    'update_of_attribute_columns'=> array(
                        'PUT' => array (
                            array('attr1', 'OTS'),
                            array('attr2',  128)
                        )
                    )
                ),

                //CompositeColumnValueFilter結構
                array ( 
                    //UPDATE操作
                    'operation_type' => OperationTypeConst::CONST_UPDATE,
                    'condition' => array (
                        'row_existence' => RowExistenceExpectationConst::CONST_EXPECT_EXIST,
                        // attr1 = 'Tablestore' and attr2 >= 256
                        'column_condition' => array (
                            'logical_operator' => LogicalOperatorConst::CONST_AND,
                            'sub_conditions' => array (
                                array (
                                    'column_name' => 'attr2',
                                    'value' => 256,
                                    'comparator' => ComparatorTypeConst::CONST_GREATER_EQUAL
                                ),
                                array (
                                    'column_name' => 'attr1',
                                    'value' => 'Tablestore',
                                    'comparator' => ComparatorTypeConst::CONST_EQUAL
                                )
                            )
                        )
                    ),
                    'primary_key' => array (
                        array('PK1', 'pkValue'),
                        array('PK2', 22)
                    ),
                    'update_of_attribute_columns'=> array(
                        'PUT' => array (),
                        // 用 attribute_columns/delete 指定要刪除的列
                        'DELETE_ALL' => array(
                            'attr1',
                            'attr2'
                        )
                    )
                ),
            )
        )
    )
);

$response = $otsClient->batchWriteRow ($request);

// 處理返回的每個表
foreach ($response['tables'] as $tableData) {
    print "Handling table {$tableData['table_name']} ...\n";
    
    // 處理這個表下的PutRow返回的結果
    $putRows = $tableData['rows'];
    
    foreach ($putRows as $rowData) {
      
      if ($rowData['is_ok']) {
        // 寫入成功
        print "Capacity Unit Consumed: {$rowData['consumed']['capacity_unit']['write']}\n";
      } else {
        // 處理出錯
        print "Error: {$rowData['error']['code']} {$rowData['error']['message']}\n";
      }
    }
  }

通過Condition實現樂觀鎖機制遞增一列

以下示例用于構造Condition實現樂觀鎖機制,遞增一列。

    //讀取一行數據。
    $request = [
        'table_name' => 'MyTable', 
        'primary_key' => [ //主鍵。
            ['PK0', 123],
            ['PK1', 'abc']
        ],
        'max_versions' => 1
    ];
    $response = $otsClient->getRow ($request);
    $columnMap = getColumnValueAsMap($response['attribute_columns']);
    $col0Value = $columnMap['col0'][0][1];
    //條件更新Col0列, 使列值加1。
    $request = [
        'table_name' => 'MyTable',
        'condition' => [
            'row_existence' => RowExistenceExpectationConst::CONST_EXPECT_EXIST,
            'column_condition' => [                  //滿足條件,則更新數據。
                'column_name' => 'col0',
                'value' => $col0Value,
                'comparator' => ComparatorTypeConst::CONST_EQUAL
            ]
        ],
        'primary_key' => [ //主鍵。
            ['PK0', 123],
            ['PK1', 'abc']
        ],
        'update_of_attribute_columns'=> [
            'PUT' => [
                ['col0', $col0Value+1]
            ]
        ]
    ];
    $response = $otsClient->updateRow ($request);

更多代碼示例,請參見PutRow@GitHubUpdateRow@GitHubDeleteRow@GitHubBatchWriteRow@GitHub