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 customer ;
或者
DROP TABLE IF EXISTS customer ;
参考链接:
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