最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql切到國產(chǎn)數(shù)據(jù)庫KingbaseES后的SQL區(qū)別

 更新時間:2026年06月13日 10:54:31   作者:一只牛博  
從MySQL切換至KingbaseES時需要關(guān)注的幾個關(guān)鍵點(diǎn):確認(rèn)客戶端連接、正確使用連接參數(shù)、區(qū)分用戶與數(shù)據(jù)庫、以及普通用戶權(quán)限,文章詳細(xì)解釋了如何通過ksql命令進(jìn)行連接,并強(qiáng)調(diào)了在KingbaseES中,用戶與數(shù)據(jù)庫的的概念區(qū)分,以及如何通過普通用戶連接特定數(shù)據(jù)庫

數(shù)據(jù)庫裝好以后,第一件事不是建業(yè)務(wù)表,也不是急著看復(fù)雜語法,而是先確認(rèn)客戶端能不能穩(wěn)定連進(jìn)去。

MySQL 用久了,手上一般會有一套很熟的動作:服務(wù)起來以后,敲一條 mysql -h -P -u -p,能進(jìn)交互界面,再查個 select version()。這套動作看起來簡單,但它解決的是最基礎(chǔ)的問題:當(dāng)前連的是哪臺機(jī)器、哪個端口、哪個用戶、哪個庫。

切到 KingbaseES 以后,入口換成了 ksql。命令也不復(fù)雜,不過幾個參數(shù)不能直接按 MySQL 的習(xí)慣套。尤其是數(shù)據(jù)庫名這一項,如果沒顯式寫出來,很容易遇到一個看起來像連接失敗、實際只是默認(rèn)庫不對的錯誤。

先確認(rèn)用的是哪個 ksql

安裝目錄里不止有數(shù)據(jù)庫服務(wù)端程序,也有客戶端工具。開始連庫之前,先確認(rèn)當(dāng)前 shell 里找到的 ksql 來自哪里。

which ksql
ksql --version
ksql --help | head -n 40

當(dāng)前環(huán)境里,ksql 來自安裝目錄下的 Server/bin

/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/ksql

版本返回的是:

ksql (KingbaseES) V009R001C010

這一步看著普通,但后面排查問題時很有用。機(jī)器上如果裝過多個版本,或者 PATH 里混進(jìn)了別的客戶端工具,先確認(rèn)命令來源能省不少時間。

ksql --help 里也能看到它自己的參數(shù)習(xí)慣。比如數(shù)據(jù)庫名使用 -d,用戶名使用 -U,端口使用 -p。這幾個大小寫和 MySQL 不完全一樣。

MySQL:
mysql -h 127.0.0.1 -P 3306 -u root -p

KingbaseES:
ksql -h 127.0.0.1 -p 54321 -U system -d test

對 MySQL 用戶來說,最容易順手寫錯的是端口和用戶名:MySQL 端口是大寫 -P,用戶是小寫 -uksql 端口是小寫 -p,用戶是大寫 -U

這里還有一個細(xì)節(jié):ksql 的幫助里把用法寫成了 ksql [OPTION]... [DBNAME [USERNAME]]。也就是說,數(shù)據(jù)庫名和用戶名除了用參數(shù)指定,也能放在命令最后。實際寫文章或腳本時,用 -U、-d 會更清楚。

比如下面兩種寫法都能表達(dá)連接目標(biāo):

ksql -h 127.0.0.1 -p 54321 -U system -d test
ksql -h 127.0.0.1 -p 54321 test system

前一種更適合放在文章和腳本里。參數(shù)名一眼能看出來,后面排查連接問題時也不會猜最后兩個位置參數(shù)分別是什么。

少了數(shù)據(jù)庫名,錯誤會有點(diǎn)繞

先看一條不完整的連接命令:

ksql -h 127.0.0.1 -p 54321 -U system

輸入密碼后,返回的是:

FATAL: database "system" does not exist

這個錯誤不能馬上往“服務(wù)沒起來”或者“密碼錯了”上想。這里密碼已經(jīng)進(jìn)入校驗流程,服務(wù)端也有響應(yīng),真正的問題是沒有指定要連接的數(shù)據(jù)庫。

ksql 在沒有 -d 的情況下,會嘗試連接和用戶名同名的數(shù)據(jù)庫。當(dāng)前用戶名是 system,它就去找名為 system 的數(shù)據(jù)庫。實例里沒有這個庫,于是報了 database "system" does not exist。

這點(diǎn)和 MySQL 的使用習(xí)慣很容易打架。MySQL 里很多時候先用管理員用戶連進(jìn)去,再 use 庫名;而這里最好一開始就把目標(biāo)數(shù)據(jù)庫寫清楚。

這類錯誤也提醒了一件事:連接數(shù)據(jù)庫時不要只看“賬號密碼對不對”。主機(jī)、端口、用戶、數(shù)據(jù)庫名四個值是一起工作的。服務(wù)能響應(yīng)、密碼能通過,并不代表目標(biāo)數(shù)據(jù)庫一定存在。以后看到 could not connect to serverpassword authentication faileddatabase does not exist 這幾類錯誤,也要分開判斷,不能全當(dāng)成同一種連接失敗。

把 -d 寫上,先連進(jìn) test

補(bǔ)上數(shù)據(jù)庫名以后,連接命令變成:

ksql -h 127.0.0.1 -p 54321 -U system -d test

這次能正常進(jìn)入交互界面,提示符變成了:

test=#

這條命令里主要是四個參數(shù):

-h 127.0.0.1   連接本機(jī)數(shù)據(jù)庫服務(wù)
-p 54321       連接端口
-U system      登錄用戶
-d test        目標(biāo)數(shù)據(jù)庫

這里的 test 是初始化后可以連接的數(shù)據(jù)庫。實際環(huán)境里可以換成自己的業(yè)務(wù)庫或?qū)嶒瀻欤P(guān)鍵是不要讓客戶端去猜默認(rèn)庫。

提示符也能順手看一下。test=# 里的 test 是當(dāng)前數(shù)據(jù)庫,后面的 # 和當(dāng)前高權(quán)限用戶有關(guān)。后面換成普通用戶連接 app_db 時,提示符會變成 app_db=>。它不是權(quán)限檢查工具,但能快速看出當(dāng)前大概連在哪個庫、用的是什么級別的用戶。

連進(jìn)去以后,先確認(rèn)自己在哪

進(jìn)入交互界面后,先查當(dāng)前數(shù)據(jù)庫、當(dāng)前用戶和版本:

select current_database(), current_user;
select version();

當(dāng)前返回結(jié)果里,數(shù)據(jù)庫是 test,用戶是 system,版本是 KingbaseES V009R001C010。

MySQL 里常用 select database();、select user(); 看當(dāng)前位置。KingbaseES 這里換成:

select current_database(), current_user;

命令不同,作用差不多。后面要創(chuàng)建用戶、創(chuàng)建數(shù)據(jù)庫、建表,先確認(rèn)當(dāng)前庫和當(dāng)前用戶,能少犯很多低級錯誤。

再試一個最小查詢:

select 1;

然后用 \conninfo 看當(dāng)前連接信息:

\conninfo

最后退出:

\q

這里順手碰到了 ksql 里的另一類命令:反斜杠開頭的是客戶端元命令,不是 SQL。比如 \conninfo 查看連接信息,\q 退出客戶端。元命令后面單獨(dú)展開,這里先知道它不是發(fā)給數(shù)據(jù)庫執(zhí)行的 SQL 就行。

select 1; 這種 SQL 會被發(fā)送到數(shù)據(jù)庫執(zhí)行;\conninfo\qksql 客戶端自己處理。這一點(diǎn)和 MySQL 客戶端里的部分命令有點(diǎn)像,比如 status、source、\q 這類動作不完全等同于 SQL。先把這個邊界分清,后面看 \l、\d、\dt 時就不會困惑:為什么這些命令不用分號,為什么它們不是標(biāo)準(zhǔn) SQL。

環(huán)境變量也能連

完整參數(shù)寫熟以后,可以用環(huán)境變量減少重復(fù)輸入。

export KINGBASE_HOST=127.0.0.1
export KINGBASE_PORT=54321
export KINGBASE_USER=system
export KINGBASE_DATABASE=test

再執(zhí)行:

ksql

客戶端會讀取這些環(huán)境變量,直接連接到對應(yīng)數(shù)據(jù)庫。

環(huán)境變量適合固定連接目標(biāo)。比如這臺測試機(jī)一直連 127.0.0.1:54321test 庫,就可以少敲一串參數(shù)。

臨時測試時,先放在當(dāng)前終端即可,不急著寫進(jìn) .bashrc。要確認(rèn)當(dāng)前 shell 里留了什么值,可以直接看:

echo $KINGBASE_HOST
echo $KINGBASE_PORT
echo $KINGBASE_USER
echo $KINGBASE_DATABASE

換用戶、換庫、換服務(wù)器之前,最好先清掉舊值:

unset KINGBASE_HOST KINGBASE_PORT KINGBASE_USER KINGBASE_DATABASE

這樣再執(zhí)行 ksql 時,就會回到手動傳參的狀態(tài),不會帶著上一次的連接目標(biāo)。

別一直用 system 做實驗

前面的連接都是用 system 做的。安裝初始化階段用它沒問題,但日常寫 SQL、試表結(jié)構(gòu)、做小實驗,最好不要一直使用管理員用戶。

這里創(chuàng)建一個普通用戶:

create user app_user with password '<實驗密碼>' nosuperuser nocreatedb nocreaterole;

執(zhí)行成功后返回:

CREATE ROLE

再用 \du 看角色列表,可以看到 app_user 已經(jīng)存在。

這里有個細(xì)節(jié):命令寫的是 create user,返回卻是 CREATE ROLE。這不是異常。官方文檔里也能看到,CREATE USERCREATE ROLE 的別名,區(qū)別在于 CREATE USER 默認(rèn)帶登錄屬性。也就是說,KingbaseES 這里的用戶和角色體系是放在一起理解的。

這里不展開完整權(quán)限模型,只先做一個最小隔離:管理員用戶負(fù)責(zé)創(chuàng)建資源,普通用戶負(fù)責(zé)實驗操作。

nosuperuser nocreatedb nocreaterole 這幾個選項也不用背得太早,先看字面就夠了:不是超級用戶,不能創(chuàng)建數(shù)據(jù)庫,不能創(chuàng)建角色。也就是說,app_user 只是一個普通登錄用戶。這樣后面用它建表、插入數(shù)據(jù)時,能更接近日常應(yīng)用賬號的狀態(tài),而不是一直用管理員權(quán)限把問題蓋過去。

創(chuàng)建用戶時的密碼只用于本地實驗,公開內(nèi)容里不要放真實密碼。示例里可以寫成 <實驗密碼>,實際操作時按自己的密碼策略設(shè)置。命令輸出里如果出現(xiàn)密碼,也應(yīng)該提前打碼。

給普通用戶建一個自己的數(shù)據(jù)庫

用戶創(chuàng)建好以后,再創(chuàng)建一個數(shù)據(jù)庫,并把 owner 指向這個用戶:

create database app_db owner app_user;

執(zhí)行成功后,用 \l 看數(shù)據(jù)庫列表。app_db 出現(xiàn)在列表里,owner 是 app_user。

這里要把兩個概念分清楚:用戶和數(shù)據(jù)庫不是一回事。app_user 是登錄身份,app_db 是數(shù)據(jù)庫。把 app_db 的 owner 指給 app_user,再用這個用戶連接這個庫,就不用一直依賴 system。

官方 CREATE DATABASE 文檔里也有對應(yīng)語法,OWNER 可以指定新數(shù)據(jù)庫的所有者。創(chuàng)建數(shù)據(jù)庫本身需要超級用戶或者 CREATEDB 權(quán)限,這也是這里繼續(xù)使用 system 來執(zhí)行創(chuàng)建動作的原因。

和 MySQL 對比時,這里也容易有錯覺。MySQL 里經(jīng)常把“一個庫 + 一個用戶 + 一組授權(quán)”放在一起理解,業(yè)務(wù)上也會說“給某個用戶建一個庫”。KingbaseES 這里仍然可以這么組織實驗環(huán)境,但概念上要分開:用戶是用戶,數(shù)據(jù)庫是數(shù)據(jù)庫,owner 是數(shù)據(jù)庫的所有者,后面還會遇到 schema 和對象權(quán)限。當(dāng)前這一步只先把用戶和數(shù)據(jù)庫綁定起來,不把權(quán)限體系一次講完。

用普通用戶重新連一次

退出當(dāng)前連接后,換成普通用戶連接新庫:

ksql -h 127.0.0.1 -p 54321 -U app_user -d app_db

進(jìn)入后先確認(rèn)當(dāng)前身份:

select current_database(), current_user;

返回的是 app_dbapp_user。這說明連接目標(biāo)已經(jīng)從管理員用戶的 test,切到了普通用戶自己的數(shù)據(jù)庫。

接著做一個很小的寫入驗證:

create table t_ksql_conn_demo(id int, name varchar(50));
insert into t_ksql_conn_demo values (1, 'hello ksql');
select * from t_ksql_conn_demo;

結(jié)果能查到 hello ksql,說明這個普通用戶不僅能連庫,也能在自己的數(shù)據(jù)庫里完成建表和寫入。

到這一步,ksql 入門就不只是“連上了”這么簡單。連接參數(shù)、默認(rèn)數(shù)據(jù)庫、當(dāng)前用戶、普通用戶、數(shù)據(jù)庫 owner,都已經(jīng)串起來了。

這個小表沒有業(yè)務(wù)含義,只是驗證連接后的寫入能力。比單純執(zhí)行 select 1 更進(jìn)一步:select 1 只能說明查詢能執(zhí)行,建表和插入成功,才說明這個用戶在當(dāng)前數(shù)據(jù)庫里確實有基本操作能力。后面要繼續(xù)練 SQL,也可以從這個 app_db 開始,避免在 test 庫里越堆越亂。

先把連接習(xí)慣改過來

從 MySQL 切到 ksql,第一關(guān)不是 SQL 方言,而是連接習(xí)慣。

mysql 常用的是:

mysql -h 127.0.0.1 -P 3306 -u root -p

ksql 這里更建議一開始就寫完整:

ksql -h 127.0.0.1 -p 54321 -U app_user -d app_db

幾個點(diǎn)最容易踩:

端口參數(shù):MySQL 是 -P,ksql 是 -p
用戶參數(shù):MySQL 是 -u,ksql 是 -U
數(shù)據(jù)庫名:ksql 最好顯式寫 -d
默認(rèn)行為:不寫 -d 時,可能嘗試連接和用戶名同名的數(shù)據(jù)庫
管理員用戶:system 用來初始化和管理,不適合所有實驗都壓在它身上

到此這篇關(guān)于mysql切到國產(chǎn)數(shù)據(jù)庫KingbaseES后的SQL區(qū)別的文章就介紹到這了,更多相關(guān)mysql和KingbaseES的SQL區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL中NULL和空值的區(qū)別及說明

    MySQL中NULL和空值的區(qū)別及說明

    這篇文章主要介紹了MySQL中NULL和空值的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SQL中CAST()實例之轉(zhuǎn)換數(shù)據(jù)類型

    SQL中CAST()實例之轉(zhuǎn)換數(shù)據(jù)類型

    CAST函數(shù)用于將某種數(shù)據(jù)類型的表達(dá)式顯式轉(zhuǎn)換為另一種數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于SQL中CAST()實例之轉(zhuǎn)換數(shù)據(jù)類型的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 更新至MySQL 5.7.9的詳細(xì)教程

    更新至MySQL 5.7.9的詳細(xì)教程

    文章介紹了MySQL 5.7.9 GA版本的更新過程和一些常見警告的解決方法,包括設(shè)置`secure-file-priv`參數(shù)、跳過SSL連接、使用`skip-networking`代替`skip-name-resolve`等,感興趣的朋友一起看看吧
    2025-02-02
  • Linux下編譯安裝Mysql 5.5的簡單步驟

    Linux下編譯安裝Mysql 5.5的簡單步驟

    Linux下面因為從MySQL 5.5開始使用cmake來做config了,所以編譯安裝的會和5.1版本有些區(qū)別。不過總體來說還是差別不大
    2015-08-08
  • 基于mysql 默認(rèn)排序規(guī)則的坑

    基于mysql 默認(rèn)排序規(guī)則的坑

    這篇文章主要介紹了解決mysql 默認(rèn)排序規(guī)則的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看不看
    2021-02-02
  • MySQL定時任務(wù)(EVENT事件)如何配置詳解

    MySQL定時任務(wù)(EVENT事件)如何配置詳解

    這篇文章主要介紹了MySQL定時任務(wù)(EVENT事件)如何配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MySQL日期時間類型與字符串互相轉(zhuǎn)換的方法

    MySQL日期時間類型與字符串互相轉(zhuǎn)換的方法

    這篇文章主要介紹了MySQL日期時間類型與字符串互相轉(zhuǎn)換的方法,文中通過代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • Windows MySQL修改配置文件my.ini不生效問題

    Windows MySQL修改配置文件my.ini不生效問題

    在Windows Server 2019上修改MySQL 5.6的安裝目錄下my.ini文件后,需要通過修改注冊表中的ImagePath值來確保MySQL讀取新的配置文件,修改時應(yīng)確保配置文件路徑正確,并且新配置不會覆蓋原有配置,以保證修改生效
    2025-01-01
  • 深入mysql并發(fā)插入優(yōu)化詳解

    深入mysql并發(fā)插入優(yōu)化詳解

    本篇文章是對mysql并發(fā)插入優(yōu)化進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL導(dǎo)出sql腳本文件操作指南

    MySQL導(dǎo)出sql腳本文件操作指南

    mysql數(shù)據(jù)庫是非常常用的一種數(shù)據(jù)庫,屬于中小型數(shù)據(jù)庫,常用于網(wǎng)站業(yè)務(wù)和一些WEB系統(tǒng)業(yè)務(wù),下面這篇文章主要給大家介紹了關(guān)于MySQL導(dǎo)出sql腳本文件操作的相關(guān)資料,需要的朋友可以參考下
    2023-01-01

最新評論

奇台县| 龙州县| 黄浦区| 马关县| 尤溪县| 绥阳县| 运城市| 泰兴市| 金山区| 溧阳市| 万载县| 仙桃市| 淄博市| 宁阳县| 寿光市| 金湖县| 兴业县| 新乡市| 敦化市| 通许县| 周至县| 基隆市| 沧州市| 杂多县| 通海县| 三门县| 淮安市| 罗田县| 手游| 中宁县| 都江堰市| 青神县| 乌兰浩特市| 喀喇沁旗| 察雅县| 万山特区| 朔州市| 固始县| 澎湖县| 乳山市| 武陟县|