本節提供有關 NdbTransaction
類別的資訊。
- 父類別
無
- 子類別
無
- 描述
交易在 NDB API 中由
NdbTransaction
物件表示,該物件屬於Ndb
物件,並使用Ndb::startTransaction()
建立。交易包含由NdbOperation
類別,或其子類別之一 —NdbScanOperation
、NdbIndexOperation
或NdbIndexScanOperation
所表示的作業清單。每個作業都只存取一個資料表。- 方法
-
下表列出此類別的公用方法,以及每個方法的用途或用法
表 2.66 NdbTransaction 類別方法和描述
方法
readTuple()
、insertTuple()
、updateTuple()
、writeTuple()
、deleteTuple()
、scanTable()
和scanIndex()
需要使用NdbRecord
。 - 類型
-
NdbTransaction
定義了 2 個公用類型,如下表所示
使用交易。 取得 NdbTransaction
物件後,其使用方式如下
-
使用下列任何一種方法將操作分配給交易
getNdbOperation()
getNdbScanOperation()
getNdbIndexOperation()
getNdbIndexScanOperation()
呼叫其中一種方法來定義操作。可以在同一個
NdbTransaction
物件上定義多個操作,在這種情況下,它們會並行執行。當所有操作都定義完成後,execute()
方法會將它們傳送至NDB
核心以供執行。 -
當
NDB
核心完成先前定義的所有操作的執行時,execute()
方法會傳回。所有已配置的操作都應在呼叫
execute()
方法之前正確定義。 -
execute()
以這裡列出的三種模式之一執行NdbTransaction::NoCommit
:執行操作而不提交它們。NdbTransaction::Commit
:執行任何剩餘的操作,然後提交完整的交易。NdbTransaction::Rollback
:回滾整個交易。
execute()
還配備了一個額外的錯誤處理參數,它提供了以下兩個選項NdbOperation::AbortOnError
:任何錯誤都會導致交易中止。這是預設行為。NdbOperation::AO_IgnoreError
:即使為該交易定義的一個或多個操作失敗,交易也會繼續執行。
- 描述
-
此方法會關閉交易。它等同於呼叫
Ndb::closeTransaction()
。如果交易尚未提交,則在呼叫此方法時會中止交易。請參閱 Ndb::startTransaction()。
- 簽名
void close ( void )
- 參數
無.
- 傳回值
無.
- 描述
此方法會取得交易的提交狀態。
- 簽名
CommitStatusType commitStatus ( void )
- 參數
無.
- 傳回值
交易的提交狀態,類型為
CommitStatusType
的值。
- 描述
使用
NdbRecord
刪除元組。- 簽名
const NdbOperation* deleteTuple ( const NdbRecord* key_rec, const char* key_row, const NdbRecord* result_rec, char* result_row, const unsigned char* result_mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
- 參數
-
此方法採用下列參數
key_rec
是指向表格或索引的NdbRecord
的指標。如果是在表格上,則刪除操作會使用主鍵;如果是在索引上,則操作會使用唯一鍵。在任何一種情況下,key_rec
都必須包含索引的所有欄位。傳遞給此方法的
key_row
定義了要刪除的元組的主鍵或唯一鍵,並且必須保持有效,直到呼叫execute()
為止。result_rec
是要使用的NdbRecord
。如果要傳回任何屬性,
result_row
可以是NULL
。如果
result_mask
不是NULL
,則定義要讀取並傳回給用戶端的屬性子集。遮罩會被複製,因此在呼叫此方法傳回後,不需要保持有效。OperationOptions
(opts
) 可用於提供更精細的操作定義控制。傳遞具有旗標的OperationOptions
結構,這些旗標指出存在哪些操作定義選項。並非所有操作類型都支援所有操作選項;對於每種操作類型支援的選項,請參閱 NdbTransaction::readTuple()。選用的
sizeOfOptions
參數提供此介面與先前OperationOptions
結構定義的向後相容性。如果介面實作偵測到不尋常的大小,則可以使用此參數來決定如何解譯傳遞的OperationOptions
結構。若要啟用此功能,呼叫者應傳遞sizeof(NdbOperation::OperationOptions)
作為此引數的值。
- 傳回值
指向代表此寫入操作的
NdbOperation
的const
指標。如有必要,可以檢查操作是否有錯誤。
本節提供有關 ExecType
資料類型的資訊。
- 描述
此類型設定交易的執行類型;也就是說,它應該執行、執行並提交,還是中止。它用作
execute()
方法的參數。(請參閱 NdbTransaction::execute()。)- 列舉值
-
下表顯示了可能的值以及描述
- 描述
此方法用於執行交易。
- 簽名
int execute ( ExecType execType, NdbOperation::AbortOption abortOption = NdbOperation::DefaultAbortOption, int force = 0 )
- 參數
-
execute()
方法採用這裡列出的三個參數執行類型(
ExecType
值);如需更多資訊和可能的值,請參閱 NdbTransaction::ExecType。-
中止選項(
NdbOperation::AbortOption
值)。從此方法產生的錯誤會在
NdbOperation::getNdbError()
中找到,而不是在NdbTransaction::getNdbError()
中找到。 -
一個
force
參數,決定何時將操作傳送至NDB
核心。它採用這裡列出的值之一0
:非強制;由自適應傳送演算法偵測到。1
:強制;由自適應傳送演算法偵測到。2
:非強制;自適應傳送演算法未偵測到。
如需更多資訊,請參閱第 1.4.4 節「自適應傳送演算法」。
- 傳回值
成功時傳回
0
,失敗時傳回-1
。交易未中止的事實並不一定表示每個操作都成功;您必須單獨檢查每個操作是否有錯誤。
此方法僅在交易中止時報告失敗。在這種情況下,會設定交易的錯誤資訊以反映實際的錯誤代碼和類別。
如果有可能發生 NoDataFound 錯誤,您必須明確檢查它,如本範例所示
Ndb_cluster_connection myConnection;
if( myConnection.connect(4, 5, 1) )
{
cout << "Unable to connect to cluster within 30 secs." << endl;
exit(-1);
}
Ndb myNdb(&myConnection, "test");
// define operations...
myTransaction = myNdb->startTransaction();
if(myTransaction->getNdbError().classification == NdbError:NoDataFound)
{
cout << "No records found." << endl;
// ...
}
myNdb->closeTransaction(myTransaction);
您應該知道,成功的 execute()
呼叫僅保證掃描請求已組裝並傳送至交易協調器,且沒有任何錯誤;它不會等待從資料節點傳回的任何訊號,然後才傳回。
- 描述
如果仍有任何尚未執行的給定類型的 blob 部分操作,則此方法會以等於
NoCommit
的ExecType
來執行交易。- 簽名
int executePendingBlobOps ( Uint8 flags = 0xFF )
- 參數
flags
參數是位元運算OR
的結果,等於1 <<
,其中optype
optype
是一個NdbOperation::Type
。預設值對應於NdbOperation::Type::PrimaryKeyAccess
。- 傳回值
成功時傳回
0
,失敗時傳回-1
。交易未中止的事實並不一定表示每個操作都成功;您必須單獨檢查每個操作是否有錯誤。
- 描述
-
此方法會擷取交易的全域檢查點 ID (GCI)。
每個已提交的交易都屬於一個 GCI。當發生全域檢查點時,已提交交易的記錄會儲存在磁碟上。
透過比較交易的 GCI 與重新啟動的 NDB Cluster 中還原的最新 GCI 值,您可以判斷是否已還原該交易。
此方法無法判斷具有此 GCI 的全域檢查點是否已儲存到磁碟上。
掃描交易的 GCI 是未定義的,因為掃描交易中不會執行任何更新。
在以
ExecType::Commit
呼叫execute()
之前,沒有可用的 GCI。 - 簽名
int getGCI ( void )
- 參數
無.
- 傳回值
交易的 GCI,如果沒有可用的,則為
-1
。
- 描述
取得 blob 讀取操作的目前批次大小 (以位元組為單位)。當在給定交易中要讀取的 blob 資料量超過此值時,將執行該交易的所有待處理 blob 讀取操作。
- 簽名
Uint32 getMaxPendingBlobReadBytes ( void ) const
- 參數
無.
- 傳回值
目前的 blob 讀取批次大小,以位元組為單位。如需更多資訊,請參閱 NdbTransaction::setMaxPendingBlobReadBytes()。
- 描述
取得 blob 寫入操作的目前批次大小 (以位元組為單位)。當在給定交易中要寫入的 blob 資料量超過此值時,將執行該交易的所有待處理 blob 寫入操作。
- 簽名
Uint32 getMaxPendingBlobWriteBytes ( void ) const
- 參數
無.
- 傳回值
目前的 blob 寫入批次大小,以位元組為單位。如需更多資訊,請參閱 NdbTransaction::setMaxPendingBlobWriteBytes()。
- 描述
此方法會傳回發生最近錯誤的行號。
- 簽名
int getNdbErrorLine ( void )
- 參數
無.
- 傳回值
最近錯誤的行號。
如需交易中處理錯誤的其他資訊,請參閱 第 1.4.2.3.6 節,「錯誤處理」。
- 描述
-
此方法會擷取造成錯誤的操作。
若要取得有關實際錯誤的更多資訊,請使用
getNdbErrorOperation()
所傳回的NdbOperation
物件的NdbOperation::getNdbError()
方法。 - 簽名
NdbOperation* getNdbErrorOperation ( void )
- 參數
無.
- 傳回值
指向
NdbOperation
的指標。
如需交易中處理錯誤的其他資訊,請參閱 第 1.4.2.3.6 節,「錯誤處理」。
- 描述
-
此方法用於建立與給定表格關聯的
NdbIndexOperation
。相同交易中的所有索引操作都必須使用此方法初始化。操作必須在執行之前定義。
- 簽名
NdbIndexOperation* getNdbIndexOperation ( const NdbDictionary::Index* index )
- 參數
要執行操作的
Index
物件。- 傳回值
指向新的
NdbIndexOperation
的指標。
- 描述
-
此方法用於建立與給定表格關聯的
NdbIndexScanOperation
。相同交易中的所有索引掃描操作都必須使用此方法初始化。操作必須在執行之前定義。
- 簽名
NdbIndexScanOperation* getNdbIndexScanOperation ( const NdbDictionary::Index* index )
- 參數
要執行操作的
Index
物件。- 傳回值
指向新的
NdbIndexScanOperation
的指標。
- 描述
-
此方法用於建立與給定表格關聯的
NdbOperation
。相同交易中的所有操作都必須使用此方法初始化。操作必須在執行之前定義。
- 簽名
NdbOperation* getNdbOperation ( const NdbDictionary::Table* table )
- 參數
要執行操作的
Table
物件。- 傳回值
指向新的
NdbOperation
的指標。
- 描述
-
此方法用於建立與給定表格關聯的
NdbScanOperation
。相同交易中的所有掃描操作都必須使用此方法初始化。操作必須在執行之前定義。
- 簽名
NdbScanOperation* getNdbScanOperation ( const NdbDictionary::Table* table )
- 參數
要執行操作的
Table
物件。- 傳回值
指向新的
NdbScanOperation
的指標。
- 描述
-
此方法用於擷取交易的已完成操作。它通常用於擷取屬於給定交易的所有操作,以檢查錯誤。
NdbTransaction::getNextCompletedOperation(NULL)
會傳回交易的第一個NdbOperation
物件;NdbTransaction::getNextCompletedOperation(
會傳回在myOp
)NdbOperation
myOp
之後定義的NdbOperation
物件。此方法僅應在交易執行之後,但在交易關閉之前使用。
- 簽名
const NdbOperation* getNextCompletedOperation ( const NdbOperation* op ) const
- 參數
此方法需要一個參數
op
,它是一個操作 (NdbOperation
物件),或NULL
。- 傳回值
在
op
之後的操作,如果使用NULL
呼叫getNextCompletedOperation()
,則為為交易定義的第一個操作。
- 描述
使用
NdbRecord
插入元組。- 簽名
-
const NdbOperation* insertTuple ( const NdbRecord* key_rec, const char* key_row, const NdbRecord* attr_rec, const char* attr_row, const unsigned char* mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
const NdbOperation* insertTuple ( const NdbRecord* combined_rec, const char* combined_row, const unsigned char* mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
- 參數
-
insertTuple()
採用下列參數-
指向
NdbRecord
的指標,指示要插入的記錄 (key_rec
)。也可以使用單個
NdbRecord
指標和單個char
指標 (combined_rec
,combined_row
) 呼叫此方法,其中單個NdbRecord
代表記錄和屬性與資料。 要插入的資料列 (
key_row
)。指向
NdbRecord
的指標,指示要插入的屬性 (attr_rec
)。要作為屬性插入的資料列 (
attr_row
)。可用於篩選要插入的欄位的
mask
。OperationOptions
(opts
) 可用於提供更精細的操作定義控制。傳遞具有旗標的OperationOptions
結構,這些旗標指出存在哪些操作定義選項。並非所有操作類型都支援所有操作選項;對於每種操作類型支援的選項,請參閱 NdbTransaction::readTuple()。可選的
sizeOfOptions
參數用於保留此介面與先前OperationOptions
結構定義的向後相容性。如果介面實作偵測到不尋常的大小,則可以使用此參數來判斷如何解譯傳遞的OperationOptions
結構。若要啟用此功能,呼叫者應傳遞sizeof(NdbOperation::OperationOptions)
作為此引數的值。
-
- 傳回值
指向表示此插入操作的
NdbOperation
的const
指標。
- 描述
此方法使用
NdbRecord
物件讀取元組。- 簽名
const NdbOperation* readTuple ( const NdbRecord* key_rec, const char* key_row, const NdbRecord* result_rec, char* result_row, NdbOperation::LockMode lock_mode = NdbOperation::LM_Read, const unsigned char* result_mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
- 參數
-
此方法採用下列參數
key_rec
是指向表格或索引的NdbRecord
的指標。如果在表格上,則該操作使用主索引鍵;如果在索引上,則該操作使用唯一索引鍵。在任一情況下,key_rec
都必須包含索引鍵的所有欄位。-
傳遞給此方法的
key_row
定義受影響元組的主索引鍵或唯一索引鍵,並且必須保持有效直到呼叫execute()
為止。如果 mask 不是
NULL
,則定義要讀取、更新或插入的屬性子集。只有在設定(mask[
時,才會影響該欄位。mask 會由方法複製,因此不需要在呼叫傳回之後保持有效。attrId
>> 3] & (1<<(attrId
& 7))) result_rec
是指向用於保存結果的NdbRecord
的指標result_row
定義結果資料的緩衝區。lock_mode
指定操作生效的鎖定模式。如需允許的值和其他資訊,請參閱 NdbOperation::LockMode。result_mask
定義要讀取的屬性子集。只有在設定mask[attrId >> 3] & (1<<(attrId & 7))
時,才會影響該欄位。mask 會被複製,因此不需要在方法呼叫傳回之後保持有效。-
可使用
OperationOptions
(opts
) 更精細地控制操作定義。OperationOptions
結構會傳遞帶有旗標,指出存在哪些操作定義選項。並非所有操作類型都支援所有操作選項;下表顯示每種操作類型支援的選項。表 2.70 NdbTransaction::readTuple() 的 OperationOptions (opts) 參數的操作類型,以及每種類型支援的操作選項
操作類型 (方法) OperationOptions
支援的旗標readTuple()
OO_ABORTOPTION
、OO_GETVALUE
、OO_PARTITION_ID
、OO_INTERPRETED
insertTuple()
OO_ABORTOPTION
、OO_SETVALUE
、OO_PARTITION_ID
、OO_ANYVALUE
updateTuple()
OO_ABORTOPTION
、OO_SETVALUE
、OO_PARTITION_ID
、OO_INTERPRETED
、OO_ANYVALUE
writeTuple()
OO_ABORTOPTION
、OO_SETVALUE
、OO_PARTITION_ID
、OO_ANYVALUE
deleteTuple()
OO_ABORTOPTION
、OO_GETVALUE
、OO_PARTITION_ID
、OO_INTERPRETED
、OO_ANYVALUE
可選的
sizeOfOptions
參數用於保留此介面與先前OperationOptions
結構定義的向後相容性。如果介面實作偵測到不尋常的大小,則可以使用此參數來判斷如何解譯傳遞的OperationOptions
結構。若要啟用此功能,呼叫者應傳遞sizeof(NdbOperation::OperationOptions)
作為此引數的值。
- 傳回值
指向代表此讀取操作的
NdbOperation
的指標(可用於檢查錯誤)。
- 描述
-
此方法會更新交易的逾時計數器,因此可避免因交易逾時而中止。
不建議鎖定記錄並長時間維持鎖定,因為這會影響其他交易。
- 簽名
int refresh ( void )
- 參數
無.
- 傳回值
成功時傳回
0
,失敗時傳回-1
。
- 描述
-
當不再需要鎖定控制代碼時,此方法用於釋放鎖定控制代碼(請參閱 NdbOperation::getLockHandle)。對於
NdbRecord
主索引鍵讀取操作,必須在執行相關聯的讀取操作後才能呼叫此方法。當關閉交易時,會釋放與指定交易相關聯的所有鎖定控制代碼。
- 簽名
int releaseLockHandle ( const NdbLockHandle* lockHandle )
- 參數
要釋放的
NdbLockHandle
物件。- 傳回值
成功時傳回 0。
- 描述
對資料表執行索引範圍掃描,並可選擇是否排序。
- 簽名
NdbIndexScanOperation* scanIndex ( const NdbRecord* key_record, const NdbRecord* result_record, NdbOperation::LockMode lock_mode = NdbOperation::LM_Read, const unsigned char* result_mask = 0, const NdbIndexScanOperation::IndexBound* bound = 0, const NdbScanOperation::ScanOptions* options = 0, Uint32 sizeOfOptions = 0 )
- 參數
key_record
描述要掃描的索引。它必須是索引的索引鍵記錄;也就是說,它必須至少指定索引的所有索引鍵欄。key_record
必須從要掃描的索引建立(而不是從基礎資料表)。-
result_record
描述要從掃描傳回的列。對於排序的索引掃描,result_record
必須是要掃描索引的索引鍵記錄;也就是說,它必須至少包含索引中的所有欄(NDB API 需要完整的索引鍵,才能合併排序從每個片段傳回的排序列)。與
key_record
類似,result_record
必須從基礎資料表建立,而不是從要掃描的索引建立。在掃描操作關閉之前,key_record
和result_record
這兩個NdbRecord
結構都必須保持就緒狀態。 result_mask
指標是選用的。如果存在此指標,則只會擷取result_mask
中對應位元(依屬性 ID 順序)設定的欄。result_mask
會在內部複製,因此與result_record
不同,在叫用execute()
時,它不必有效。-
可以在此呼叫中或在另行呼叫
NdbIndexScanOperation::setBound()
時指定單一IndexBound
。若要執行多範圍讀取,ScanOptions
結構中的scan_flags
必須包含SF_MULTIRANGE
。可以使用連續呼叫NdbIndexScanOperation::setBound()
來新增其他界限。若要指定等號界限,請使用相同的列指標作為
low_key
和high_key
,並設定低和高包含位元。對於多範圍掃描,
low_key
和high_key
指標必須是唯一的。換句話說,不允許在單次掃描中為數個不同的範圍界限重複使用相同的列緩衝區。但是,允許使用相同的列指標作為low_key
和high_key
,以便指定等號界限;在scanIndex()
方法傳回後,也允許重複使用這些列,也就是說,它們不必保持有效,直到execute()
時間(與NdbRecord
指標不同)。 若要指定其他選項,請傳遞
ScanOptions
結構。存在
sizeOfOptions
,是為了啟用此介面的回溯相容性。此參數會指出用戶端編譯時ScanOptions
結構的大小,並可偵測到舊樣式ScanOptions
結構的使用。如果不需要此功能,則可以將此引數設定為 0。
- 傳回值
目前的
NdbIndexScanOperation
,可用於錯誤檢查。
- 描述
此方法會使用
NdbRecord
物件來讀取欄資料,以執行資料表掃描。- 簽名
NdbScanOperation* scanTable ( const NdbRecord* result_record, NdbOperation::LockMode lock_mode = NdbOperation::LM_Read, const unsigned char* result_mask = 0, Uint32 scan_flags = 0, Uint32 parallel = 0, Uint32 batch = 0 )
- 參數
-
scanTable()
方法採用下列參數指向
NdbRecord
的指標,用於儲存結果。此result_record
必須保持有效,直到execute()
呼叫完成後。操作生效的
lock_mode
。如需允許的值和其他資訊,請參閱 NdbOperation::LockMode。result_mask
指標是選用的。如果存在此指標,則只會擷取result_mask
中對應位元(依屬性 ID 順序)設定的欄。result_mask
會在內部複製,因此與result_record
不同,在叫用execute()
時,它不必有效。scan_flags
可用於為掃描強制執行排序和排序條件。如需允許值的清單,請參閱 NdbScanOperation::ScanFlag。parallel
引數是所需的平行處理,或0
表示最大平行處理(平行接收所有片段的列),此為預設值。batch
決定是否採用批次處理。預設值為 0(關閉)。
- 傳回值
指向代表此掃描的
NdbScanOperation
的指標。如有必要,可以檢查操作是否有錯誤。
- 描述
設定 blob 讀取操作的批次大小(以位元組為單位)。當給定交易中要讀取的 blob 資料量超過此數量時,將會執行所有交易的擱置 blob 讀取操作。
- 簽名
void setMaxPendingBlobReadBytes ( Uint32 bytes )
- 參數
批次大小,以
bytes
的數量表示。使用 0 會停用 blob 讀取批次處理,此為預設行為(為了回溯相容性)。- 傳回值
無.
也可以使用 MySQL 伺服器的 --ndb-blob-read-batch-bytes
選項及其相關聯的 MySQL 伺服器系統變數,在 mysql 用戶端和其他 MySQL 用戶端應用程式中控制 blob 讀取批次處理。
- 描述
設定 blob 寫入操作的批次大小(以位元組為單位)。當給定交易中要寫入的 blob 資料量超過此數量時,將會執行所有交易的擱置 blob 寫入操作。
- 簽名
void setMaxPendingBlobWriteBytes ( Uint32 bytes )
- 參數
批次大小,以
bytes
的數量表示。使用 0 會停用 blob 寫入批次處理,此為預設行為(為了回溯相容性)。- 傳回值
無.
在 NDB 8.0.30 及更新版本中,也可以藉由將 MySQL 伺服器的 ndb_replica_blob_write_batch_bytes
伺服器系統變數設定為適當的值,在 mysql 用戶端和其他 MySQL 用戶端應用程式中控制 blob 寫入批次處理。您應注意,當 ndb_replica_blob_write_batch_bytes
未設定時,有效的 blob 批次大小(也就是 blob 欄要寫入的最大擱置位元組數)是由 ndb_replica_blob_write_batch_bytes
的預設值和 --ndb-blob-write-batch-bytes
MySQL 伺服器選項設定的值所決定的最大值。因此,您應該使用 ndb_replica_blob_write_batch_bytes
,而不是 --ndb-blob-write-batch-bytes
。
在 NDB 8.0.30 之前,您必須使用 --ndb-blob-write-batch-bytes
選項或其相關聯的 MySQL 伺服器系統變數之一,才能從 mysql 或其他 MySQL 用戶端程式設定 blob 批次大小。
- 描述
-
當使用多個
Ndb_cluster_connection
物件時,啟用或停用結構描述物件所有權檢查。啟用此檢查時,會檢查此交易使用的物件,以確定它們屬於此連線擁有的NdbDictionary
。這是透過從連線擷取相同名稱的結構描述物件,並將這些物件與傳遞給交易的結構描述物件進行比較來完成的。如果它們不相符,則會傳回錯誤。此方法可用於偵錯用途。(錯誤 #19875977) 您應注意,啟用此檢查會產生效能損耗,因此您應避免在生產環境中執行此操作。
- 簽名
void setSchemaObjOwnerChecks ( bool runChecks )
- 參數
單一參數
runChecks
。使用true
啟用所有權檢查,使用false
停用所有權檢查。- 傳回值
無.
- 描述
此方法會在目前的交易上建立解除鎖定操作;執行時,解除鎖定操作會移除方法傳遞的
NdbLockHandle
參考的鎖定(請參閱 NdbOperation::getLockHandle)。- 簽名
const NdbOperation* unlock ( const NdbLockHandle* lockHandle, NdbOperation::AbortOption ao = NdbOperation::DefaultAbortOption )
- 參數
-
指向鎖定控制代碼的指標;此外,可選擇性地傳遞
AbortOption
值ao
。如果解除鎖定操作失敗 (例如,因為該列已被解除鎖定),
AbortOption
會指定如何處理這種情況,預設情況下,錯誤會導致交易中止。 - 傳回值
指向
NdbOperation
的指標 (已建立的解除鎖定操作)。
- 描述
使用
NdbRecord
物件更新元組。- 簽名
const NdbOperation* updateTuple ( const NdbRecord* key_rec, const char* key_row, const NdbRecord* attr_rec, const char* attr_row, const unsigned char* mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
- 參數
-
updateTuple()
接受以下參數key_rec
是指向表格或索引的NdbRecord
的指標。如果在表格上,則該操作使用主索引鍵;如果在索引上,則該操作使用唯一索引鍵。在任一情況下,key_rec
都必須包含索引鍵的所有欄位。傳遞給此方法的
key_row
定義受影響元組的主索引鍵或唯一索引鍵,並且必須保持有效直到呼叫execute()
為止。-
attr_rec
是參考要更新屬性的NdbRecord
。注意對於唯一索引操作,
attr_rec
必須參照索引的基礎資料表,而不是索引本身。 attr_row
是包含更新新資料的緩衝區。如果
mask
不是NULL
,則定義要更新的屬性子集。遮罩會被複製,因此在呼叫此方法返回後不需要保持有效。OperationOptions
(opts
) 可用於提供更精細的操作定義控制。傳遞具有旗標的OperationOptions
結構,這些旗標指出存在哪些操作定義選項。並非所有操作類型都支援所有操作選項;對於每種操作類型支援的選項,請參閱 NdbTransaction::readTuple()。可選的
sizeOfOptions
參數用於保留此介面與先前OperationOptions
結構定義的向後相容性。如果介面實作偵測到不尋常的大小,則可以使用此參數來判斷如何解譯傳遞的OperationOptions
結構。若要啟用此功能,呼叫者應傳遞sizeof(NdbOperation::OperationOptions)
作為此引數的值。
- 傳回值
代表此操作的
NdbOperation
(可用於檢查錯誤)。
- 描述
此方法與
NdbRecord
一起使用,以寫入資料元組。- 簽名
const NdbOperation* writeTuple ( const NdbRecord* key_rec, const char* key_row, const NdbRecord* attr_rec, const char* attr_row, const unsigned char* mask = 0, const NdbOperation::OperationOptions* opts = 0, Uint32 sizeOfOptions = 0 )
- 參數
-
此方法採用下列參數
key_rec
是指向表格或索引的NdbRecord
的指標。如果在表格上,則該操作使用主索引鍵;如果在索引上,則該操作使用唯一索引鍵。在任一情況下,key_rec
都必須包含索引鍵的所有欄位。傳遞給此方法的
key_row
定義要寫入的元組的主要或唯一鍵,並且必須保持有效直到呼叫execute()
。-
attr_rec
是參考要寫入屬性的NdbRecord
。對於唯一索引操作,
attr_rec
必須參照索引的基礎資料表,而不是索引本身。 attr_row
是包含新資料的緩衝區。如果
mask
不是NULL
,則定義要寫入的屬性子集。遮罩會被複製,因此在呼叫此方法返回後不需要保持有效。OperationOptions
(opts
) 可用於提供更精細的操作定義控制。傳遞具有旗標的OperationOptions
結構,這些旗標指出存在哪些操作定義選項。並非所有操作類型都支援所有操作選項;對於每種操作類型支援的選項,請參閱 NdbTransaction::readTuple()。可選的
sizeOfOptions
參數用於提供此介面與先前OperationOptions
結構定義的向後相容性。如果介面實作偵測到不尋常的大小,它可以使用此參數來判斷如何解譯傳遞的OperationOptions
結構。若要啟用此功能,呼叫者應為此引數的值傳遞sizeof(NdbOperation::OperationOptions)
。
- 傳回值
指向代表此寫入操作的
NdbOperation
的const
指標。如有必要,可以檢查操作是否有錯誤。