在先前的几篇有关应用开发基础的文章中介绍了CockroachDB中如何创建数据库、创建表(以及创建表的更多用法示例)和索引等内容。在这篇文章中,将向大家介绍基本的SQL操纵语句(DML语句),这些是应用开发人员在开发数据库访问逻辑时最频繁使用的。CockraochDB对DML语句的支持深度是在开源分布式NewSQL/HTAP产品中是比较领先的,不仅支持基本的SELECT、INSERT、UPDATE、DELETE等语句,还支持UPSERT、WITH等语句。下面我将结合示例向大家介绍CockroachDB的DML语句。
1. INSERT语句
(1) 插入单行
在CRDB中,可以使用INSERT 语句向一个表插入数据。例如:
CREATE TABLE accounts(
id INT PRIMARY KEY ,
name VARCHAR(30),
balance DECIMAL(15,2)
);
INSERT INTO accounts VALUES (1, 'user11', 1000.25);
INSERT INTO accounts VALUES (2, 'user22', 2000.75);
SELECT * FROM accounts;
如下图所示:
(2) 插入多行
我们还可以使用INSERT INTO语句插入多条记录,例如:
INSERT INTO accounts VALUES (3,'user33',3500.10) , (4,'user44',4000.35);
SELECT * FROM accounts;
如下图所示:
(3) INSERT SELECT
在CRDB中,我们还可以使用INSERT SELECT语句把SELECT语句得到的结果集和插入到一个表中。例如:
INSERT INTO accounts (id, name, balance) SELECT number, amount FROM tmp_accounts WHERE id > 4;
(4) INSERT ON CONFLICT
在CRDB中,当执行INSERT语句时发现插入的记录与已经存在的记录产生冲突(比如:主键或唯一性发生了冲突)时,CRDB会把待插入的冲突记录存储在一个名为excluded的临时表中。我们看如下的例子:
INSERT INTO accounts VALUES (4,'user44',4500.35)
ON CONFLICT (id)
DO UPDATE SET balance = excluded.balance;
SELECT * FROM accounts WHERE id = 4;
输出如下图所示:
在发生冲突时,我们可以使用已经存在记录的值,例如:
INSERT INTO accounts VALUES (4,'user44',4500.35)
ON CONFLICT (id)
DO UPDATE SET balance = accounts.balance + excluded.balance;
SELECT * FROM accounts WHERE id = 4;
输出如下图所示:
2. UPDATE 语句
在CRDB中,可以使用UPDATE语句修改一个表中的记录数据。例如:
UPDATE accounts SET balance = 5000.0 WHERE id = 2;
SELECT * FROM accounts;
如下图所示:
我们也可以更新一行中的多个字段的值。例如:
UPDATE accounts SET (name, balance) = ( 'Eric',9000.0) WHERE id = 2;
也可以如下写法:
UPDATE accounts SET name='Alice', balance = 6300.0 WHERE id = 3;
我们还可以联合SELECT语句进行更新,例如:
UPDATE accounts SET (balance, name) =
(SELECT balance, name FROM accounts WHERE id = 2)
WHERE id = 4;
5. DELETE语句
在CRDB中,我们使用DELETE 语句删除表内数据。例如:
DELETE FROM accounts WHERE id=1;
6. 查询语句
在CRDB中,使用SELECT 语句检索表内数据,SELECT查询语法丰富、能力强大,在这里只简单介绍(后续的文章中会逐步介绍CRDB的SELECT语句的多种用法)。例如:
SELECT * FROM accounts LIMIT 10;
参考:
https://www.cockroachlabs.com/docs/stable/insert.html
https://www.cockroachlabs.com/docs/stable/update.html
https://www.cockroachlabs.com/docs/stable/delete.html
https://www.cockroachlabs.com/docs/stable/select-clause.html