1.3學習cockroachSQL
1.3.1 關鍵的sql語句:
cockroachDB支持標準的SQL延伸,但是一些標準的SQL函數還不可用,詳細清查看Sql 特點支持頁面,查看更多細節**創建數據庫
cockroah自帶單一的默認系統數據庫,包含cockroachDB的元數據是隻讀的
root@:26257/> create database bank;
數據庫命名必須遵從這些規則:
https://www.cockroachlabs.com/docs/stable/keywords-and-identifiers.html#identifiers
即:
1)以unicode字母或者下劃線開頭,後面的字母可以是字母、下劃線、數字(0-9)、美元($)
2) 不能使用SQL關鍵字
root@:26257/> create database bank;
避免數據庫存在,可以使用如下語句
----數據庫已經存在,也不會有提醒,輸出如下
root@:26257/> create database if not exists bank;
CREATE DATABASE
Time: 5.798442ms
刪除數據庫和其中的所有對象:
root@:26257/> drop database bank;
**查看數據庫
root@:26257/> show databases;
+--------------------+
| Database |
+--------------------+
| bank |
| crdb_internal |
| information_schema |
| pg_catalog |
| system |
+--------------------+
(5 rows)
Time: 9.822993ms
**設置默認數據庫:
root@:26257/> show database
-> ;
+----------+
| database |
+----------+
| |
+----------+
(1 row)
Time: 2.163744ms
設置默認數據庫,不需要明確的引用
root@:26257/> set database = bank;
SET
Time: 5.578012ms
查看默認數據庫
root@:26257/bank> SHOW database;
+----------+
| database |
+----------+
| bank |
+----------+
(1 row)
Time: 2.164562ms
**創建一個表
root@:26257/> create table bank.accounts(id int primary key,balance decimal);
CREATE TABLE
Time: 49.272314ms
定義數據類型和約束,
數據類型:https://www.cockroachlabs.com/docs/stable/data-types.html
約束: https://www.cockroachlabs.com/docs/stable/constraints.html
當你沒有顯示的定義一個主鍵,cochroach會西東定義一個隱藏的rowid作爲主鍵root@:26257/bank> create table if not exists accounts(
-> id int primary key,
-> balance decimal);
CREATE TABLE
Time: 24.13113ms
查看錶中的所有列:root@:26257/bank> show columns from accounts;
+---------+---------+-------+---------+-------------+
| Field | Type | Null | Default | Indices |
+---------+---------+-------+---------+-------------+
| id | INT | false | NULL | {"primary"} |
| balance | DECIMAL | true | NULL | {} |
+---------+---------+-------+---------+-------------+
(2 rows)
Time: 39.56398ms
刪除表及數據:
root@:26257/bank> drop table accounts;
**查看table
root@:26257/bank> show tables;
+----------+
| Table |
+----------+
| accounts |
+----------+
(1 row)
Time: 8.02106ms
查看其他數據庫的表
root@:26257/bank> show tables from animals;
+-------+
| Table |
+-------+
| frogs |
+-------+
(1 row)
Time: 9.405729ms
**插入行root@:26257/> insert into bank.accounts values (1,1000.50) ;
INSERT 1
亂序插入:
root@:26257/bank> INSERT INTO accounts(balance, id) VALUES (25000.00, 3);
INSERT 1
Time: 13.715741ms
插入多行:
root@:26257/bank> insert into accounts values (4,8100.73),(5,9400.10);
INSERT 2
Time: 13.452986ms
默認值使用,本例子中默認值爲空
root@:26257/bank> insert into accounts (id) values (7);
INSERT 1
Time: 40.842133ms
root@:26257/bank> insert into accounts (id,balance) values (6,default);
INSERT 1
Time: 8.194243ms
root@:26257/bank> select * from accounts where id in (6,7);
+----+---------+
| id | balance |
+----+---------+
| 6 | NULL |
| 7 | NULL |
+----+---------+
(2 rows)
Time: 3.471182ms
**創建索引:
索引幫助去定位數據,而不需要去掃描表內的每行數據,自動創建表的主鍵,有獨立約束。
爲非唯一列創建索引:
root@:26257/bank> create index balance_idx on accounts(balance desc);
CREATE INDEX
Time: 637.757236ms
在表創建中,可以使用索引
root@:26257/bank> create table custom(id int,name string,index name_idx(name desc));
CREATE TABLE
Time: 49.841363ms
**查看索引
root@:26257/bank> show index from accounts;
+----------+-------------+--------+-----+---------+-----------+---------+----------+
| Table | Name | Unique | Seq | Column | Direction | Storing | Implicit |
+----------+-------------+--------+-----+---------+-----------+---------+----------+
| accounts | primary | true | 1 | id | ASC | false | false |
| accounts | balance_idx | false | 1 | balance | DESC | false | false |
| accounts | balance_idx | false | 2 | id | ASC | false | true |
+----------+-------------+--------+-----+---------+-----------+---------+----------+
(3 rows)
Time: 17.100527ms
**查詢數據
root@:26257/bank> select balance from accounts;
+----------+
| balance |
+----------+
| 1000.50 |
| 800.50 |
| 25000.00 |
| 8100.73 |
| 9400.10 |
| NULL |
| NULL |
+----------+
(7 rows)
Time: 7.391805ms
root@:26257/bank> select * from accounts;
+----+----------+
| id | balance |
+----+----------+
| 1 | 1000.50 |
| 2 | 800.50 |
| 3 | 25000.00 |
| 4 | 8100.73 |
| 5 | 9400.10 |
| 6 | NULL |
| 7 | NULL |
+----+----------+
(7 rows)
Time: 6.413298ms
root@:26257/bank> SELECT * FROM accounts where balance >9000;
+----+----------+
| id | balance |
+----+----------+
| 3 | 25000.00 |
| 5 | 9400.10 |
+----+----------+
(2 rows)
Time: 4.9048ms
root@:26257/bank> SELECT * FROM accounts order by balance desc;
+----+----------+
| id | balance |
+----+----------+
| 3 | 25000.00 |
| 5 | 9400.10 |
| 4 | 8100.73 |
| 1 | 1000.50 |
| 2 | 800.50 |
| 6 | NULL |
| 7 | NULL |
+----+----------+
(7 rows)
Time: 4.358385ms
**更新行
root@:26257/bank> update accounts set balance = balance - 5.50 where balance < 10000;
UPDATE 4
Time: 74.469221ms
root@:26257/bank> select * from accounts;
+----+----------+
| id | balance |
+----+----------+
| 1 | 995.00 |
| 2 | 795.00 |
| 3 | 25000.00 |
| 4 | 8095.23 |
| 5 | 9394.60 |
| 6 | NULL |
| 7 | NULL |
+----+----------+
(7 rows)
Time: 6.937405ms
如果一個表有主鍵,可以使用where子句去更新具體的行,否則每個行匹配到where字句會被更新。
**刪除表
root@:26257/bank> delete from accounts where id in (6,7);
DELETE 2
Time: 42.058324ms
root@:26257/bank> select * from accounts;
+----+----------+
| id | balance |
+----+----------+
| 1 | 995.00 |
| 2 | 795.00 |
| 3 | 25000.00 |
| 4 | 8095.23 |
| 5 | 9394.60 |
+----+----------+
(5 rows)
Time: 2.664848ms