云數(shù)據(jù)庫(kù)GaussDB主鍵
云數(shù)據(jù)庫(kù)GaussDB主鍵
GaussDB數(shù)據(jù)庫(kù)涉及到主鍵的編程規(guī)范
INSERT
INSERT ON DUPLICATE KEY UPDATE不支持對(duì)主鍵或唯一約束的列上執(zhí)行UPDATE。
INSERT ON DUPLICATE KEY UPDATE的語(yǔ)義是對(duì)唯一約束沖突的行進(jìn)行更新,這個(gè)過(guò)程中不應(yīng)對(duì)約束的值進(jìn)行更新。
INSERT ON DUPLICATE KEY UPDATE如果插入多條數(shù)據(jù),這些數(shù)據(jù)之間不允許存在主鍵/唯一約束沖突。
與MySQL行為存在一定差異,MYSQL允許此行為,例如如下語(yǔ)句:
INSERT INTO t1 VALUES(1, 1), (1, 2) ON DUPLICATE KEY UPDATE col2 = VALUES(col2);
不符合SQL標(biāo)準(zhǔn),SQL標(biāo)準(zhǔn)不允許在同一條SQL COMMAND中,對(duì)插入行同時(shí)進(jìn)行修改,使得結(jié)果無(wú)可預(yù)期。
例如上例中,假設(shè)col1為主鍵,那么此時(shí)會(huì)在同一個(gè)COMMAND中,既插入一條主鍵為1的,同時(shí)對(duì)已插入進(jìn)行修改。由于事務(wù)串行化無(wú)法確認(rèn)哪一個(gè)操作先執(zhí)行,因此可能導(dǎo)致結(jié)果不穩(wěn)定。
如果插入的數(shù)據(jù)本身存在沖突,在分布式場(chǎng)景下更新應(yīng)以哪一條記錄為準(zhǔn)難以確定。
禁止對(duì)存在多個(gè)唯一約束的表執(zhí)行INSERT ON DUPLICATE KEY UPDATE。
說(shuō)明:表中存在多個(gè)唯一約束包括存在多個(gè)唯一索引,或既存在主鍵(PRIMARY KEY),又存在唯一索引(UNQUE INDEX)兩種情況。
當(dāng)存在多個(gè)唯一約束時(shí),會(huì)默認(rèn)檢查所有的唯一約束條件,只要任何一個(gè)約束存在沖突,就會(huì)對(duì)沖突行進(jìn)行更新,即可能更新多條記錄,與業(yè)務(wù)預(yù)期不相符。業(yè)務(wù)應(yīng)給予更加明確的插入更新條件。
對(duì)于批量插入的情況,建議使用INSERT INTO TABLE1 VALUES (),(),(),執(zhí)行效率將高于執(zhí)行多條INSERT INTO VALUES()
說(shuō)明:由于目前無(wú)法識(shí)別多個(gè)值是否屬于一個(gè)shard,所以要使用/*+ multinode */ 來(lái)允許此語(yǔ)句執(zhí)行。
無(wú)論單條和多條插入,關(guān)鍵字均需是VALUES。
不支持MySQL的INSERT INTO mytable VALUE()的用法。
CREATE TABLE
功能描述
在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)新的空白表,該表由命令執(zhí)行者所有。
注意事項(xiàng)
列存表支持的數(shù)據(jù)類(lèi)型請(qǐng)參考列存表支持的數(shù)據(jù)類(lèi)型。
列存表不支持?jǐn)?shù)組。
列存表不支持生成列。
列存表不支持創(chuàng)建全局臨時(shí)表。
創(chuàng)建列存表的數(shù)量建議不超過(guò)1000個(gè)。
如果在建表過(guò)程中數(shù)據(jù)庫(kù)系統(tǒng)發(fā)生故障,系統(tǒng)恢復(fù)后可能無(wú)法自動(dòng)清除之前已創(chuàng)建的、大小為0的磁盤(pán)文件。此種情況出現(xiàn)概率小,不影響數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行。
列存表的表級(jí)約束只支持PARTIAL CLUSTER KEY、UNIQUE、PRIAMRY KEY,不支持外鍵等表級(jí)約束。
列存表的字段約束只支持NULL、NOT NULL和DEFAULT常量值、UNIQUE和PRIMARY KEY。
列存表支持delta表,受參數(shù)enable_delta_store控制是否開(kāi)啟,受參數(shù)deltarow_threshold控制進(jìn)入delta表的閥值。
使用JDBC時(shí),支持通過(guò)PrepareStatement對(duì)DEFAULT值進(jìn)行參數(shù)化設(shè)置。
被授予CREATE ANY TABLE權(quán)限的用戶,可以在public模式和用戶模式下創(chuàng)建表。如果想要?jiǎng)?chuàng)建包含serial類(lèi)型列的表,還需要授予CREATE ANY SEQUENCE創(chuàng)建序列的權(quán)限。
開(kāi)放能力
活動(dòng)對(duì)象:華為云電銷(xiāo)客戶及渠道伙伴客戶可參與消費(fèi)滿送活動(dòng),其他客戶參與前請(qǐng)咨詢客戶經(jīng)理
活動(dòng)時(shí)間: 2020年8月12日-2020年9月11日
活動(dòng)期間,華為云用戶通過(guò)活動(dòng)頁(yè)面購(gòu)買(mǎi)云服務(wù),或使用上云禮包優(yōu)惠券在華為云官網(wǎng)新購(gòu)云服務(wù),累計(jì)新購(gòu)實(shí)付付費(fèi)金額達(dá)到一定額度,可兌換相應(yīng)的實(shí)物禮品?;顒?dòng)優(yōu)惠券可在本活動(dòng)頁(yè)面中“上云禮包”等方式獲取,在華為云官網(wǎng)直接購(gòu)買(mǎi)(未使用年中云鉅惠活動(dòng)優(yōu)惠券)或參與其他活動(dòng)的訂單付費(fèi)金額不計(jì)入統(tǒng)計(jì)范圍內(nèi);
-
開(kāi)發(fā)指南
服務(wù)介紹、開(kāi)發(fā)準(zhǔn)備、使用場(chǎng)景等
-
API參考
實(shí)例管理、備份管理、任務(wù)管理、標(biāo)簽管理、磁盤(pán)管理等
-
SDK
基于華為云SDK,通過(guò)編碼調(diào)用華為云API,訪問(wèn)華為云資源和數(shù)據(jù)
-
示例代碼
數(shù)據(jù)庫(kù)實(shí)例創(chuàng)建、查詢、刪除、用戶授權(quán)、備份、SQL調(diào)優(yōu)等