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