cockroach官方文檔翻譯---1.3 學習cockroachSQL

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章