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;

CockroachDB SQL开发基础 ——创建数据库和表-LMLPHP

     (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”错误,阻止删除数据库。

CockroachDB SQL开发基础 ——创建数据库和表-LMLPHP

           可以执行如下语句删除它:

                   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;  -- 查看指定数据库下的所有表

CockroachDB SQL开发基础 ——创建数据库和表-LMLPHP

 

       例4: 

            使用SHOW CREATE 语句查看建表语句:

             SHOW CREATE TABLE accounts ;       

CockroachDB SQL开发基础 ——创建数据库和表-LMLPHP

 

       例5:

             使用SHOW COLUMNS 语句查看表的列。例如:

             SHOW COLUMNS FROM accounts;

CockroachDB SQL开发基础 ——创建数据库和表-LMLPHP

 

       例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

 

10-07 17:29