【Cassandra】数据类型和基础语法

1.cassandra的数据类型

CQL提供了一组丰富的内置数据类型,包括集合类型。除了这些数据类型,用户还可以创建自己的自定义数据类型。

(1)普通类型:

在这里插入图片描述

(2)集合类型:

list 列表(或称数组)是一个或多个有序元素的集合。
map 地图是键值对的集合。
set 集合是一个或多个元素的集合。

(3)自定义

2.键空间操作

-- 查看所有键空间
DESCRIBE KEYSPACES;

--创建键空间
CREATE KEYSPACE test01 WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};

-- 修改键空间
修改键空间的属性与创建的属性相同。它有两个属性:replication和durable_writes。
ALTER KEYSPACE test01 WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1' : 2} AND DURABLE_WRITES = false;

-- 删除键空间
DROP KEYSPACE test01;

说明:

replication_factor:3,即数据备份到3台服务器,但不能超过集群机器数量哦

3.表操作

创建表

在创建表时要定义主键
下面给出一个使用cqlsh在Cassandra中创建表的示例。

创建名为emp的员工表,定义它将有详细信息,如id,员工姓名,城市,工资和电话号码。Emp_id是主键。

use keyspace test01;
CREATE TABLE emp(
   emp_id int PRIMARY KEY,
   emp_name text,
   emp_city text,
   emp_sal varint,
   emp_phone varint
   );
-- 方式二:
CREATE TABLE emp(
   emp_id int ,
   emp_name text,
   emp_city text,
   emp_sal varint,
   emp_phone varint,
   PRIMARY KEY(emp_id) 
   )

select * from emp;

注意:

创建Table必须指定主键,主键是用于在表中唯一标识某一行,可以是一列或多列。

修改列

修改列可以进行两项操作:添加列和删除列.
修改列前提:请检查该表是否未使用紧凑存储选项进行定义
–添加列:为emp的表中添加一个名为emp_email的文本数据类型的

ALTER TABLE emp ADD emp_email TEXT
select * from emp 
删除列
ALTER TABLE emp drop emp_email
select * from emp
清空表
TRUNCATE 表名
索引
--创建索引
CREATE INDEX 索引名 on 表名(字段) 
CREATE INDEX name on emp(emp_name) ;
--删除索引
DROP INDEX name 

4.数据操作

插入数据
INSERT INTO emp (emp_id, emp_name, emp_city,emp_phone, emp_sal) VALUES(1,'Liyuanfang', 'beijing', 13070885888, 50000);
INSERT INTO emp (emp_id, emp_name, emp_city,emp_phone, emp_sal) VALUES(2,'Zhugeliang', 'shanghai',13168686688, 40000);
INSERT INTO emp (emp_id, emp_name, emp_city,emp_phone, emp_sal) VALUES(3,'Guanyu', 'guangzhou', 13366886868, 45000);

注意:当插入的数据主键已存在,会覆盖原来的行数据,不会报错。表中数据会以你最后插入的数据为准。

– 修改(更新)数据
UPDATE emp SET emp_city='TianJin',emp_sal=1000 where emp_id = 1;
读取数据,where 条件

注意:where条件只支持主键条件查询,非主键作为条件需要添加ALLOW FILTERING 参数

-- 不报错
 select * from emp where emp_id =1; 

 -- select * from emp where emp_sal =1000; 会报错,因为emp_sal不是主键,应添加参数。
 -- 查询成功
 select * from emp where emp_sal =1000 allow filtering;
 
删除数据

where条件只支持主键条件查询

delete from emp where emp_id = 1;
数据批处理

使用BATCH,您可以同时执行多个修改语句(插入,更新,删除)

格式:

BEGIN BATCH
<insert-stmt>/ <update-stmt>/ <delete-stmt>
APPLY BATCH
一次性插入多条数据:
BEGIN BATCH
INSERT INTO emp (emp_id, emp_name, emp_city,emp_phone, emp_sal) VALUES(2,'Zhugeliang', 'shanghai',13168686688, 40000);
INSERT INTO emp (emp_id, emp_name, emp_city,emp_phone, emp_sal) VALUES(3,'Guanyu', 'guangzhou', 13366886868, 45000);
APPLY BATCH;
同时操作增删改
BEGIN BATCH
INSERT INTO emp (emp_id, emp_name, emp_city,emp_phone, emp_sal) VALUES(5,'Baijuyi', 'ShenZhen',13508088819, 25000);
UPDATE emp SET emp_sal=6000 where emp_id=2;
DELETE FROM emp WHERE emp_id=3;
APPLY BATCH;

5.集合数据类型

cassandra支持三种类型的集合:Maps, Sets and Lists

5.1 list类型

(1)将保持元素的顺序,并且值将被对此存储
(2)通过元素的索引来获取列表数据的值
(3)Lists是非唯一值的(已排序)集合,其中元素按列表中的位置排序。
它与Sets的区别就在于是否是唯一值。

-- 创建list类型字段,并插入测试数据
CREATE TABLE data(name text PRIMARY KEY, email list<text>);
--列表中插入元素时,请在中括号[]中输入逗号分隔的所有值
INSERT INTO data(name, email) VALUES ('Tim',['tim@gmail.com','tim@yahoo.com']);
INSERT INTO data(name, email) VALUES ('Park',['park@gmail.com','park@yahoo.com']);
INSERT INTO data(name, email) VALUES ('Kobe',['kobe@gmail.com','kobe@yahoo.com']);
--更新列表
UPDATE data SET email = email +['tim@tutorialspoint.com'] where name = 'Tim';
UPDATE data SET email = email +['kobe@163.com'] where name = 'Kobe';
--查询验证结果
select  * from data 
5.2 set类型

Set是用于存储一组元素的数据类型。集合的元素将按排序顺序返回。
Set是唯一值的(已排序)集合。

-- 创建list类型字段,并插入测试数据
 CREATE TABLE data2 (name text PRIMARY KEY, phone set<varint>);
 
--集合中插入元素时,请在花括号{}中输入逗号分隔的所有值
INSERT INTO data2(name, phone)VALUES ('songjiang',{110,120});
INSERT INTO data2(name, phone)VALUES ('Wusong',{119,114,116});
--更新
UPDATE data2 SET phone = phone +{1308899012} where name = 'songjiang';
UPDATE data2 SET phone = phone +{13070830788} where name = 'Wusong';
--查询验证结果
select  * from data 
5.3 map类型

map是用于存储元素的键值对的数据类型。
Map是一组(有序)键值对,其中键是唯一的,并且按其键排序。

-- 创建map类型字段,并插入测试数据
CREATE TABLE data3 (name text PRIMARY KEY, address map<text, text>);
--map中插入元素时,输入所有的键:值对,用逗号在逗号之间以逗号分隔
INSERT INTO data3 (name, address) VALUES ('pop', {'province' : 'shandong','city' : 'qingdao' } );
INSERT INTO data3 (name, address) VALUES ('tony', {'province' : 'henan','city' : 'zhengzhou' } );

--更新
UPDATE data3 SET address = address+{'town':'chengyang'} WHERE name = 'pop';
UPDATE data3 SET address = address+{'town':'hefeilu'} WHERE name = 'tony';
--查询验证结果
select  * from data 

6.用户定义的数据类型

CQL支持用户定义类型(以下简称UDT)。可以使用下面create_type_statementalter_type_statementdrop_type_statement创建,修改和删除此类型。
注意:用于用户定义数据类型的名称不应与保留类型名称一致。

CREATE TYPE name_details (
   num int,
   pin int,
   name text,
   cvv int,
   phone set<int>
   );
-- 查看验证结果
describe type name_details;
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清平乐的技术博客

你的鼓励是我最大创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值