UPDATE
云原生數(shù)據(jù)倉(cāng)庫(kù) AnalyticDB MySQL 版支持使用UPDATE
語(yǔ)法更新單表數(shù)據(jù)或多表關(guān)聯(lián)數(shù)據(jù)。
注意事項(xiàng)
執(zhí)行
UPDATE
命令時(shí),要求表中存在主鍵。暫不支持更新主鍵列。
僅單表更新支持ORDER BY和LIMIT子句。
在更新數(shù)據(jù)量較大或數(shù)據(jù)更新頻率高(超過(guò)100 QPS)的場(chǎng)景下,使用
UPDATE
更新數(shù)據(jù)會(huì)導(dǎo)致CPU使用率升高。建議您使用REPLACE INTO
批量更新數(shù)據(jù)。詳情請(qǐng)參見(jiàn)REPLACE INTO。
單表更新
語(yǔ)法
UPDATE table_name
SET assignment_list
[WHERE where_condition]
[ORDER BY ...]
[LIMIT ...]
示例
將customer表中customer_id ='2369'
顧客的姓名更改為黃先生。
UPDATE
customer
SET
customer_name ='黃先生'
WHERE
customer_id ='2369';
多表更新
版本要求
僅3.1.6.4及以上內(nèi)核版本的集群支持多表更新。
查看企業(yè)版、基礎(chǔ)版或湖倉(cāng)版集群的內(nèi)核版本,請(qǐng)執(zhí)行
SELECT adb_version();
。如需升級(jí)內(nèi)核版本,請(qǐng)聯(lián)系技術(shù)支持。查看和升級(jí)數(shù)倉(cāng)版集群的內(nèi)核版本,請(qǐng)參見(jiàn)查看和升級(jí)版本。
語(yǔ)法
UPDATE Table_name1
[INNER JOIN | LEFT JOIN] Table_name2 ON Table_name1.C1 = Table_name2.C1
SET assignment_list
[WHERE where_condition]
注意事項(xiàng)
多表更新僅支持同時(shí)更新兩張表。
多表更新不支持ORDER BY和LIMIT子句。
多表更新時(shí),一條SQL語(yǔ)句只能更新一張表,不支持同時(shí)更新多張表。
多表更新時(shí),表順序敏感,需要將待更新的表寫(xiě)在首位。例如,將
customer
表中的customer_id
更新為1,語(yǔ)句如下:UPDATE customer LEFT JOIN new_customer ON customer.customer_name = new_customer.customer_name SET customer.customer_id = '1';
示例
LEFT JOIN
子句與UPDATE
語(yǔ)句一起使用。將
customer_id ='2369'
顧客的年齡更新為42。UPDATE customer LEFT JOIN new_customer ON customer.customer_id = new_customer.customer_id SET customer.customer_age = 42 WHERE new_customer.customer_id = '2369';
INNER JOIN
子句與UPDATE
語(yǔ)句一起使用。將customer表中的customer_id更新為2369。
UPDATE customer INNER JOIN new_customer ON customer.customer_name = new_customer.customer_name SET customer.customer_id = '2369';
將customer表中的customer_name更新為new_customer表中的customer_name。
UPDATE customer INNER JOIN new_customer ON customer.customer_id = new_customer.customer_id SET customer.customer_name = new_customer.customer_name;