openGauss數(shù)據(jù)庫(kù)之SQL介紹(下)

2虽画、openGauss數(shù)據(jù)庫(kù)SQL基本語(yǔ)法

SQL 語(yǔ)法主要分為三個(gè)類(lèi)型DDL寂呛、DML叫倍、DCL,對(duì)應(yīng)13個(gè)動(dòng)詞:

DDL(data definition language)數(shù)據(jù)定義語(yǔ)言妒御,用戶(hù)定義和管理sql數(shù)據(jù)庫(kù)中所有對(duì)象的語(yǔ)言。 主要命令:create骤素、alter、drop等

DML(data manipulation language)數(shù)據(jù)操作語(yǔ)言愚屁。 主要命令:select济竹、update、insert霎槐、delete等

DCL(date control language)數(shù)據(jù)庫(kù)控制功能送浊。主要命令:grant、deny丘跌、revoke袭景、commit唁桩、savepoint、rollback等


常見(jiàn)語(yǔ)法示例耸棒,主要包括: 創(chuàng)建用戶(hù)荒澡、創(chuàng)建和管理數(shù)據(jù)庫(kù)、創(chuàng)建表与殃、插入數(shù)據(jù)单山、更新數(shù)據(jù)、查看數(shù)據(jù)幅疼、刪除數(shù)據(jù)等

創(chuàng)建用戶(hù)(CREATE USER)

--創(chuàng)建用戶(hù)jim米奸,登錄密碼為xxxxxxxxx。

openGauss=# CREATE USER jim PASSWORD 'xxxxxxxxx';


說(shuō)明:必須至少8個(gè)字符爽篷,且至少包含3種字符(要符合常規(guī)密碼安全度設(shè)置要求)悴晰。

--下面語(yǔ)句與上面的等價(jià)。

openGauss=# CREATE USER kim IDENTIFIED BY 'xxxxxxxxx';

--如果創(chuàng)建有“創(chuàng)建數(shù)據(jù)庫(kù)”權(quán)限的用戶(hù)狼忱,則需要加CREATEDB關(guān)鍵字膨疏。

openGauss=# CREATE USER dim CREATEDB PASSWORD 'xxxxxxxxx';


--將用戶(hù)jim的登錄密碼由xxxxxxxxx修改為Abcd@123。

openGauss=# ALTER USER jim IDENTIFIED BY 'Abcd@123' REPLACE 'xxxxxxxxx';


說(shuō)明:新密碼不能使用之前用過(guò)的密碼钻弄。

--為用戶(hù)jim追加CREATEROLE權(quán)限佃却。

openGauss=# ALTER USER jim CREATEROLE;

--將enable_seqscan的值設(shè)置為on, 設(shè)置成功后窘俺,在下一會(huì)話(huà)中生效饲帅。

openGauss=# ALTER USER jim SET enable_seqscan TO on;

--重置jim的enable_seqscan參數(shù)。

openGauss=# ALTER USER jim RESET enable_seqscan;

--鎖定jim帳戶(hù)瘤泪。

openGauss=# ALTER USER jim ACCOUNT LOCK;

--刪除用戶(hù)灶泵。

openGauss=# DROP USER kim CASCADE;

openGauss=# DROP USER jim CASCADE;

openGauss=# DROP USER dim CASCADE;

說(shuō)明:CASCADE,刪除用戶(hù)關(guān)聯(lián)的所有對(duì)象。

創(chuàng)建和管理數(shù)據(jù)庫(kù)

--使用如下命令創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)db_tpcc对途。

openGauss=# CREATE DATABASE db_tpcc;

--查看數(shù)據(jù)庫(kù)

使用\l元命令查看數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)庫(kù)列表赦邻。

openGauss=# \l

使用如下命令通過(guò)系統(tǒng)表pg_database查詢(xún)數(shù)據(jù)庫(kù)列表。

openGauss=# SELECT datname FROM pg_database;

注:數(shù)據(jù)庫(kù)名稱(chēng)遵循SQL標(biāo)識(shí)符的一般規(guī)則实檀。當(dāng)前角色自動(dòng)成為此新數(shù)據(jù)庫(kù)的所有者惶洲。

如果一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)用于承載相互獨(dú)立的用戶(hù)和項(xiàng)目,建議把它們放在不同的數(shù)據(jù)庫(kù)里膳犹。

如果項(xiàng)目或者用戶(hù)是相互關(guān)聯(lián)的恬吕,并且可以相互使用對(duì)方的資源,則應(yīng)該把它們放在同一個(gè)數(shù)據(jù)庫(kù)里须床,但可以規(guī)劃在不同的模式中铐料。模式只是一個(gè)純粹的邏輯結(jié)構(gòu),某個(gè)模式的訪問(wèn)權(quán)限由權(quán)限系統(tǒng)模塊控制。

創(chuàng)建數(shù)據(jù)庫(kù)時(shí)钠惩,若數(shù)據(jù)庫(kù)名稱(chēng)長(zhǎng)度超過(guò)63字節(jié)柒凉,server端會(huì)對(duì)數(shù)據(jù)庫(kù)名稱(chēng)進(jìn)行截?cái)啵A羟?3個(gè)字節(jié)妻柒,因此建議數(shù)據(jù)庫(kù)名稱(chēng)長(zhǎng)度不要超過(guò)63個(gè)字節(jié)扛拨。

--修改數(shù)據(jù)庫(kù)

用戶(hù)可以使用如下命令修改數(shù)據(jù)庫(kù)屬性(比如:owner、名稱(chēng)和默認(rèn)的配置屬性)举塔。

使用以下命令為數(shù)據(jù)庫(kù)設(shè)置默認(rèn)的模式搜索路徑十艾。

openGauss=# ALTER DATABASE db_tpcc SET search_path TO pa_catalog,public;

--使用如下命令為數(shù)據(jù)庫(kù)重新命名械馆。

openGauss=# ALTER DATABASE db_tpcc RENAME TO human_tpcds;

--刪除數(shù)據(jù)庫(kù)

用戶(hù)可以使用DROP DATABASE命令刪除數(shù)據(jù)庫(kù)备畦。這個(gè)命令刪除了數(shù)據(jù)庫(kù)中的系統(tǒng)目錄射窒,并且刪除了磁盤(pán)上帶有數(shù)據(jù)的數(shù)據(jù)庫(kù)目錄。用戶(hù)必須是數(shù)據(jù)庫(kù)的owner或者系統(tǒng)管理員才能刪除數(shù)據(jù)庫(kù)芽丹。當(dāng)有人連接數(shù)據(jù)庫(kù)時(shí)北启,刪除操作會(huì)失敗。刪除數(shù)據(jù)庫(kù)時(shí)請(qǐng)先連接到其他的數(shù)據(jù)庫(kù)拔第。

使用如下命令刪除數(shù)據(jù)庫(kù):

openGauss=# DROP DATABASE db_tpcc;

創(chuàng)建表(CREATE TABLE)

--表是建立在數(shù)據(jù)庫(kù)中的咕村,在不同的數(shù)據(jù)庫(kù)中可以存放相同的表。甚至可以通過(guò)使用模式在同一個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建相同名稱(chēng)的表蚊俺。創(chuàng)建表前請(qǐng)先規(guī)劃存儲(chǔ)模型懈涛。

openGauss=# CREATE TABLE customer_t1

(

c_customer_sk integer,

c_customer_id char(5),

c_first_name char(6),

c_last_name char(8)

);

當(dāng)結(jié)果顯示為如下信息,則表示創(chuàng)建成功泳猬。

CREATE TABLE

其中c_customer_sk 批钠、c_customer_id、c_first_name和c_last_name是表的字段名得封,integer埋心、char(5)、char(6)和char(8)分別是這四字段名稱(chēng)的類(lèi)型忙上。

向表中插入數(shù)據(jù)

--向表中插入數(shù)據(jù)前拷呆,意味著表已創(chuàng)建成功。

向表customer_t1中插入一行:

數(shù)據(jù)值是按照這些字段在表中出現(xiàn)的順序列出的疫粥,并且用逗號(hào)分隔洋腮。通常數(shù)據(jù)值是文本(常量),但也允許使用標(biāo)量表達(dá)式手形。

openGauss=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', 'Grace');

如果用戶(hù)已經(jīng)知道表中字段的順序,也可無(wú)需列出表中的字段悯恍。例如以下命令與上面的命令效果相同库糠。

openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace');

如果用戶(hù)不知道所有字段的數(shù)值,可以忽略其中的一些。沒(méi)有數(shù)值的字段將被填充為字段的缺省值瞬欧。例如:

openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace');

openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello');

用戶(hù)也可以對(duì)獨(dú)立的字段或者整個(gè)行明確缺省值:

openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT);

openGauss=# INSERT INTO customer_t1 DEFAULT VALUES;

如果需要在表中插入多行贷屎,請(qǐng)使用以下命令:

openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES

(6885, 'maps', 'Joes'),

(4321, 'tpcds', 'Lily'),

(9527, 'world', 'James');

如果需要向表中插入多條數(shù)據(jù),除此命令外艘虎,也可以多次執(zhí)行插入一行數(shù)據(jù)命令實(shí)現(xiàn)唉侄。但是建議使用此命令可以提升效率。

如果從指定表插入數(shù)據(jù)到當(dāng)前表野建,例如在數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)表customer_t1的備份表customer_t2属划,現(xiàn)在需要將表customer_t1中的數(shù)據(jù)插入到表customer_t2中,則可以執(zhí)行如下命令候生。

openGauss=# CREATE TABLE customer_t2

(

c_customer_sk integer,

c_customer_id char(5),

c_first_name char(6),

c_last_name char(8)

);

openGauss=# INSERT INTO customer_t2 SELECT * FROM customer_t1;

從指定表插入數(shù)據(jù)到當(dāng)前表時(shí)同眯,若指定表與當(dāng)前表對(duì)應(yīng)的字段數(shù)據(jù)類(lèi)型之間不存在隱式轉(zhuǎn)換,則這兩種數(shù)據(jù)類(lèi)型必須相同唯鸭。


刪除備份表

openGauss=# DROP TABLE customer_t2 CASCADE;

在刪除表的時(shí)候须蜗,若當(dāng)前需刪除的表與其他表有依賴(lài)關(guān)系,需先刪除關(guān)聯(lián)的表目溉,然后再刪除當(dāng)前表明肮。


更新表中數(shù)據(jù)

修改已經(jīng)存儲(chǔ)在數(shù)據(jù)庫(kù)中數(shù)據(jù)的行為叫做更新。用戶(hù)可以更新單獨(dú)一行缭付,所有行或者指定的部分行柿估。還可以獨(dú)立更新每個(gè)字段,而其他字段則不受影響蛉腌。

使用UPDATE命令更新現(xiàn)有行官份,需要提供以下三種信息:

  1. 表的名稱(chēng)和要更新的字段名
  2. 字段的新值
  3. 要更新哪些行

SQL通常不會(huì)為數(shù)據(jù)行提供唯一標(biāo)識(shí),因此無(wú)法直接聲明需要更新哪一行烙丛。但是可以通過(guò)聲明一個(gè)被更新的行必須滿(mǎn)足的條件舅巷。只有在表里存在主鍵的時(shí)候,才可以通過(guò)主鍵指定一個(gè)獨(dú)立的行河咽。

建立表和插入數(shù)據(jù)的步驟請(qǐng)參考創(chuàng)建表和向表中插入數(shù)據(jù)钠右。

需要將表customer_t1中c_customer_sk為9527的地域重新定義為9876:

openGauss=# UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;

這里的表名稱(chēng)也可以使用模式名修飾,否則會(huì)從默認(rèn)的模式路徑找到這個(gè)表忘蟹。SET后面緊跟字段和新的字段值飒房。新的字段值不僅可以是常量,也可以是變量表達(dá)式媚值。

比如狠毯,把所有c_customer_sk的值增加100:

openGauss=# UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100;

在這里省略了WHERE子句,表示表中的所有行都要被更新褥芒。如果出現(xiàn)了WHERE子句嚼松,那么只有匹配其條件的行才會(huì)被更新。

在SET子句中的等號(hào)是一個(gè)賦值,而在WHERE子句中的等號(hào)是比較献酗。WHERE條件不一定是相等測(cè)試寝受,許多其他的操作符也可以使用。

用戶(hù)可以在一個(gè)UPDATE命令中更新更多的字段罕偎,方法是在SET子句中列出更多賦值很澄,比如:

openGauss=# UPDATE customer_t1 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421;

批量更新或刪除數(shù)據(jù)后,會(huì)在數(shù)據(jù)文件中產(chǎn)生大量的刪除標(biāo)記颜及,查詢(xún)過(guò)程中標(biāo)記刪除的數(shù)據(jù)也是需要掃描的甩苛。故多次批量更新/刪除后,標(biāo)記刪除的數(shù)據(jù)量過(guò)大會(huì)嚴(yán)重影響查詢(xún)的性能器予。建議在批量更新/刪除業(yè)務(wù)會(huì)反復(fù)執(zhí)行的場(chǎng)景下浪藻,定期執(zhí)行VACUUM FULL以保持查詢(xún)性能。

查看數(shù)據(jù)

使用系統(tǒng)表pg_tables查詢(xún)數(shù)據(jù)庫(kù)所有表的信息乾翔。

openGauss=# SELECT * FROM pg_tables;

使用gsql的\d+命令查詢(xún)表的屬性爱葵。

openGauss=# \d+ customer_t1;

執(zhí)行如下命令查詢(xún)表customer_t1的數(shù)據(jù)量。

openGauss=# SELECT count(*) FROM customer_t1;

執(zhí)行如下命令查詢(xún)表customer_t1的所有數(shù)據(jù)反浓。

openGauss=# SELECT * FROM customer_t1;

說(shuō)明:插數(shù)據(jù)時(shí)萌丈,沒(méi)有數(shù)值的字段將被填充為字段的缺省值。

執(zhí)行如下命令只查詢(xún)字段c_customer_sk的數(shù)據(jù)雷则。

openGauss=# SELECT c_customer_sk FROM customer_t1;

執(zhí)行如下命令過(guò)濾字段c_customer_sk的重復(fù)數(shù)據(jù)辆雾。

openGauss=# SELECT DISTINCT( c_customer_sk ) FROM customer_t1;

執(zhí)行如下命令查詢(xún)字段c_customer_sk為3869的所有數(shù)據(jù)。

openGauss=# SELECT * FROM customer_t1 WHERE c_customer_sk = 3869;

執(zhí)行如下命令按照字段c_customer_sk進(jìn)行排序月劈。

openGauss=# SELECT * FROM customer_t1 ORDER BY c_customer_sk;

刪除表中數(shù)據(jù)

在使用表的過(guò)程中度迂,可能會(huì)需要?jiǎng)h除已過(guò)期的數(shù)據(jù),刪除數(shù)據(jù)必須從表中整行的刪除猜揪。

SQL不能直接訪問(wèn)獨(dú)立的行惭墓,只能通過(guò)聲明被刪除行匹配的條件進(jìn)行。如果表中有一個(gè)主鍵而姐,用戶(hù)可以指定準(zhǔn)確的行腊凶。用戶(hù)可以刪除匹配條件的一組行或者一次刪除表中的所有行。

使用DELETE命令刪除行拴念,如果刪除表customer_t1中所有c_customer_sk為3869的記錄:

openGauss=# DELETE FROM customer_t1 WHERE c_customer_sk = 3869;

如果執(zhí)行如下命令之一钧萍,會(huì)刪除表中所有的行。

openGauss=# DELETE FROM customer_t1;

openGauss=# TRUNCATE TABLE customer_t1;

全表刪除的場(chǎng)景下政鼠,建議使用truncate风瘦,不建議使用delete。


刪除創(chuàng)建的表:

openGauss=# DROP TABLE customer_t1;

三公般、參考資料:

1.openGauss官方文檔3.0.0 開(kāi)發(fā)指南:

https://www.opengauss.org/zh/docs/3.0.0/docs/Developerguide/Developerguide.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弛秋,一起剝皮案震驚了整個(gè)濱河市器躏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蟹略,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遏佣,死亡現(xiàn)場(chǎng)離奇詭異挖炬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)状婶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)意敛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人膛虫,你說(shuō)我怎么就攤上這事草姻。” “怎么了稍刀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵撩独,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我账月,道長(zhǎng)综膀,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任局齿,我火速辦了婚禮剧劝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抓歼。我一直安慰自己讥此,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布谣妻。 她就那樣靜靜地躺著萄喳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拌禾。 梳的紋絲不亂的頭發(fā)上取胎,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音湃窍,去河邊找鬼闻蛀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛您市,可吹牛的內(nèi)容都是我干的觉痛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼茵休,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼薪棒!你這毒婦竟也來(lái)了手蝎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤俐芯,失蹤者是張志新(化名)和其女友劉穎棵介,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吧史,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邮辽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贸营。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吨述。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钞脂,靈堂內(nèi)的尸體忽然破棺而出揣云,到底是詐尸還是另有隱情,我是刑警寧澤冰啃,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布邓夕,位于F島的核電站,受9級(jí)特大地震影響亿笤,放射性物質(zhì)發(fā)生泄漏翎迁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一净薛、第九天 我趴在偏房一處隱蔽的房頂上張望汪榔。 院中可真熱鬧,春花似錦肃拜、人聲如沸痴腌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)士聪。三九已至,卻和暖如春猛蔽,著一層夾襖步出監(jiān)牢的瞬間剥悟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工曼库, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留区岗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓毁枯,卻偏偏與公主長(zhǎng)得像慈缔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子种玛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容