先看一个建表语句:
cqlsh> USE tutorialspoint;
cqlsh:tutorialspoint>; CREATE TABLE emp(
emp_id int PRIMARY KEY,
emp_name text,
emp_city text,
emp_sal varint,
emp_phone varint
);
表务必要有一个primary key,这是每一行的唯一标识。
此处插入对Cassandra支持类型的介绍:
Cassandra CQL数据类型
CQL提供了一组丰富的内置数据类型,包括集合类型。除了这些数据类型,用户还可以创建自己的自定义数据类型。下表提供了CQL中可用的内置数据类型的列表。
数据类型 | 常量 | 描述 |
---|---|---|
ascii | strings | 表示ASCII字符串 |
bigint | bigint | 表示64位有符号长 |
blob | blobs | 表示任意字节 |
Boolean | booleans | 表示true或false |
counter | integers | 表示计数器列 |
decimal | integers, floats | 表示变量精度十进制 |
double | integers | 表示64位IEEE-754浮点 |
float | integers, floats | 表示32位IEEE-754浮点 |
inet | strings | 表示一个IP地址,IPv4或IPv6 |
int | integers | 表示32位有符号整数 |
text | strings | 表示UTF8编码的字符串 |
timestamp | integers, strings | 表示时间戳 |
timeuuid | uuids | 表示类型1 UUID |
uuid | uuids | 表示类型1或类型4 |
UUID | ||
varchar | strings | 表示uTF8编码的字符串 |
varint | integers | 表示任意精度整数 |
我看到这个表之后有一些疑问:
1、text和varchar有什么区别?
A: 没区别,“text
is just an alias for varchar
!”
2. uuid 和 timeuuid有什么区别?
http://www.it1352.com/503683.html
timeuuid产生的序列号和时间顺序强相关(和用 now() 类似,只是它比较易理解),uuid则不这么强相关。
3. varint是什么?
可变精度有符号整数,和 Java 中的 java.math.BigInteger 类似;
4. Counter是什么?
Counter是一种限制很多了类型,一般情况一张表里如果有一个counter类型的字段,这张表就只能作为计数器使用了,其他字段都只能作为标识和辅助。Counter类型可以支持自增操作,符合它计数器类型的定义。除此之外,其他数字类型的字段都不支持自增操作。
它初始化之后,就不能再被设置值了,只能以+N或者-N的形式操作。
有counter类型字段的表,里面的行不能被删除,也不能支持ttl,因为这等同于超时删除。
详情见这个翻译:https://www.cnblogs.com/didda/p/4789013.html
OK,继续看。
集合类型
Cassandra查询语言还提供了一个集合数据类型。下表提供了CQL中可用的集合的列表。
集合 | 描述 |
---|---|
list | 列表是一个或多个有序元素的集合。 |
map | map是键值对的集合。 |
set | 集合是一个或多个元素的集合。(并不排重?) |
用户定义的数据类型:
Cqlsh为用户提供了创建自己的数据类型的工具。下面给出了处理用户定义的数据类型时使用的命令。
-
CREATE TYPE -创建用户定义的数据类型。
-
ALTER TYPE -修改用户定义的数据类型。
-
DROP TYPE -删除用户定义的数据类型。
-
DESCRIBE TYPE -描述用户定义的数据类型。
-
DESCRIBE TYPES -描述用户定义的数据类型。
继续回到表相关的知识。
修改表的示例语句:
cqlsh:tutorialspoint> ALTER TABLE emp
... ADD emp_email text; -- 增加列
cqlsh:tutorialspoint> ALTER TABLE emp DROP emp_email; --删除列
删除表:
cqlsh:tutorialspoint> DROP TABLE emp;
清空表数据:
cqlsh:tp> TRUNCATE student;
Done.