CockroachDB SQL开发基础 ——增删改查 (1)

     在先前的几篇有关应用开发基础的文章中介绍了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

 

猜你喜欢

转载自blog.csdn.net/u011782423/article/details/83055471
今日推荐