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