為存儲(chǔ)引擎添加對UPDATE的支持 |
發(fā)布時(shí)間: 2012/8/23 16:49:37 |
通過執(zhí)行表掃描操作,在找到與UPDATE語句的WHERE子句匹配的行后,MySQL服務(wù)器將執(zhí)行UPDATE語句,然后調(diào)用update_row()函數(shù):
int ha_foo::update_row(const byte *old_data, byte *new_data)
*old_data參數(shù)包含更新前位于行中的數(shù)據(jù),而*new_data參數(shù)包含行的新內(nèi)容(采用MySQL內(nèi)部行格式)。 更新的執(zhí)行取決于行格式和存儲(chǔ)實(shí)施方式。某些存儲(chǔ)引擎將替換恰當(dāng)位置的數(shù)據(jù),而其他實(shí)施方案則會(huì)刪除已有的行,并在數(shù)據(jù)文件末尾添加新行。
非事務(wù)性存儲(chǔ)引擎通常會(huì)忽略*old_data參數(shù)的內(nèi)容,僅處理*new_data緩沖。事務(wù)性存儲(chǔ)引擎可能需要比較緩沖,以確定在上次回滾中出現(xiàn)了什么變化。
如果正在更新的表中包含時(shí)間戳列,對時(shí)間戳的更新將由update_row()調(diào)用管理。下述示例來自CSV引擎:
int ha_tina::update_row(const byte * old_data, byte * new_data)
{
int size;
DBUG_ENTER("ha_tina::update_row");
電腦技術(shù)www.boydavid.com
statistic_increment(table->in_use->status_var.ha_read_rnd_next_count, 電腦技術(shù)www.boydavid.com
&LOCK_status); 電腦技巧www.boydavid.com
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE) 計(jì)算機(jī)學(xué)習(xí)網(wǎng)站www.boydavid.com
table->timestamp_field->set_time();
size= encode_quote(new_data);
if (chain_append())
DBUG_RETURN(-1);
if (my_write(share->data_file, buffer.ptr(), size, MYF(MY_WME | MY_NABP)))
DBUG_RETURN(-1);
DBUG_RETURN(0);
} 電腦學(xué)習(xí)網(wǎng)站www.boydavid.com
請注意上例中的時(shí)間戳設(shè)置。 本文出自:億恩科技【www.allwellnessguide.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |