1. 程式人生 > >CockroachDB SQL開發基礎 ——建立資料庫、表和檢視

CockroachDB SQL開發基礎 ——建立資料庫、表和檢視

       CockroachDB相容PostgreSQL協議和PostgreSQL語法,它的目標是提供對ANSI SQL標準的相容,在相容標準的前提下進行了一定程度的擴充套件。從客戶端的角度看,我們可以把CockroachDB當作一個儲存容量和計算能力可以“無限擴充套件”的PostgreSQL。PostgreSQL生態中的很多工具、程式和應用能夠適用於CockroachDB(不用修改或少量修改)。對於熟悉PostgreSQL資料庫的開發人員,上手CockroachDB是很快的;對於不熟悉PostgreSQL而熟悉其它資料庫的開發人員,也能夠比較快地掌握(比如熟悉MySQL或Oracle的開發人員,CockroachDB的很多SQL語句與這兩個資料庫比較相似)。

       雖然目前CockroachDB還不支援MySQL協議,但是作為CockroachDB最大使用者的百度(也是社群的重要成員)已經對其進行了擴充套件,加入了對MySQL協議的支援,可以無縫對接MySQL應用和客戶端工具。據瞭解,未來百度會把這部分的程式碼貢獻給CockroachDB社群。若能如此,CockroachDB將對接PostgreSQL和MySQL兩大生態,使得這兩大生態的使用者都能享受到CockroachDB這個優秀的新一代開源分散式NewSQL/HTAP資料庫在可擴充套件能力、強一致性ACID事務、多活高可用等方面所擁有的巨大好處。       

       本文,包括後面的多篇有關CockroachDB(後面將簡稱為CRDB) SQL開發基礎的文章主要是寫給不熟悉PostgreSQL的開發人員,讓他們儘快上手。

 1. 建立、檢視和刪除資料庫

     在初始構建好的CRDB中,只有一個叫做system的預設資料庫存在。這個資料庫用於存放系統的元資料,並且是隻讀的資料庫,如果使用者(包括資料庫的root使用者)在這個資料庫中建立表會報“user root does not have CREATE privilege on database system”錯誤。

     (1) 為了建立使用者使用的資料庫,對於CRDB來說,使用 CREATE DATABASE 語句建立。基本語法如下:

                  CREATE DATABASE db_name ;

          例如,要建立一個名為bankdb的資料庫,可使用如下語句:

                  CREATE DATABASE bankdb;

           如果希望bankdb沒有存在時才建立它,那麼可以使用如下語句:

                  CREATE DATABASE IF NOT EXISTS bankdb;

           在建立資料庫時,我們可以指定資料庫的encoding字符集,例如:

                  CREATE DATABASE IF NOT EXISTS bankdb WITH ENCODING='UTF-8';

     (2) 我們可以使用SHOW DATABASES 語句檢視CRDB叢集中已有的資料庫:

                  SHOW DATABASES;

     (3) 為了設定使用者當前的資料庫,我們可以執行USE db_name或者SET DATABASE = dbname,例如:

                  USE bankdb;

                  或者

                  SET DATABASE = bank;

           為了檢視使用者當前所在的資料庫,那麼執行如下語句:

                  SHOW DATABASE

     (4) 如果某個資料庫不再使用,那麼可以執行DROP DATABASE 語句刪除它,例如:

                  DROP DATABASE bankdb;         

          如果被刪除資料庫中還有表、索引等資料庫物件存在,那麼執行DROP DATABASE時會報:“rejected: DROP DATABASE on non-empty database without explicit CASCADE”錯誤,阻止刪除資料庫。

           可以執行如下語句刪除它:

                   DROP DATABASE bankdb CASCADE;

2. 建立、檢視和刪除表

    在CRDB中,使用CREATE TABLE 語句建立表。下面我們通過一些例子說明其用法。

    例1:

         CREATE TABLE accounts (
              id INT PRIMARY KEY, 
              name VARCHAR(20), 
              phone CHAR(15), 
              birthday DATE, 
              balance DECIMAL(15,2)
         );

 

     例2:

          如果表已存在,新增IF NOT EXISTS 可防止發生錯誤:

         CREATE TABLE IF NOT EXISTS  accounts (
              id INT PRIMARY KEY, 
              name VARCHAR(20), 
              phone CHAR(15), 
              birthday DATE, 
              balance DECIMAL(15,2)
         );

         

       例3:

             執行SHOW TABLES語句能夠檢視當前資料庫中所有的表:

              SHOW TABLES;

              SHOW TABLES FROM bankdb;  -- 檢視指定資料庫下的所有表

 

       例4: 

            使用SHOW CREATE 語句檢視建表語句:

             SHOW CREATE TABLE accounts ;       

 

       例5:

             使用SHOW COLUMNS 語句查看錶的列。例如:

             SHOW COLUMNS FROM accounts;

 

       例6:

             使用DROP TABLE 語句刪除表。例如:

             DROP TABLE accounts ;

             或者

             DROP TABLE IF EXISTS accounts ;

  3. 檢視

    CRDB支援使用者定義檢視,我們來看一個例子:

    CREATE VIEW vip_accounts (customer, amount)
        AS SELECT name,balance FROM accounts WHERE balance >= 10000;

  

參考連結:

     https://www.cockroachlabs.com/docs/stable/learn-cockroachdb-sql.html

     https://www.cockroachlabs.com/docs/stable/create-database.html

     https://www.cockroachlabs.com/docs/stable/create-table.html