导入
原生数据类型:计数器
详细了解原生数据类型:Counter。
...
Apache Cassandra 数据类型分类
...
21 种原生数据类型按类别分组
在 CREATE TABLE 语句中,可使用以下语法创建计数器列:
1columnName COUNTER
包含三个计数器列的表
1CREATE TABLE instructor_stats ( 2 instructor text PRIMARY KEY, 3 course_count COUNTER, 4 likes COUNTER, 5 dislikes COUNTER );
...
包含 COUNTER 数据类型列的 instructor_stats 表的 CREATE TABLE 语句
用于递增和递减计数器列的 UPDATE 语句
1UPDATE instructor_stats SET course_count = course_count + 3 WHERE instructor = 'DataJek'; 2UPDATE instructor_stats SET likes = likes + 1 WHERE instructor = 'DataJek'; 3UPDATE instructor_stats SET dislikes = dislikes - 1 WHERE instructor = 'DataJek';
同时递增和递减多个计数器列的 UPDATE 语句
1UPDATE instructor_stats 2SET course_count = course_count - 2, likes = likes + 7, dislikes = dislikes + 1 3WHERE instructor = 'DataJek';
...
将 course_count 增加 3,likes 增加 1 的 UPDATE 语句
...
将 course_count 增加 3,likes 增加 1 的 UPDATE 语句
...
CQL 查询关于包含计数器列的表的限制
设置脚本
1cqlsh 127.0.0.2 2 3-- 创建名为 VideoCourses 的 keyspace 4CREATE KEYSPACE IF NOT EXISTS VideoCourses WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 2}; 5 6-- 注意 keyspace 名称不区分大小写 7USE videoCoURSES; 8-- 复制并粘贴下一标签页中的语句。
原生数据类型 - 计数器
1/****************** 计数器数据类型 ******************/ 2-- 创建包含主键 instructor 和计数器列(course_count、likes、dislikes)的表 3CREATE TABLE IF NOT EXISTS instructor_stats ( 4 instructor text PRIMARY KEY, 5 course_count COUNTER, 6 likes COUNTER, 7 dislikes COUNTER 8 ); 9 10-- 错误:包含计数器列的表不允许使用 INSERT 语句 11INSERT INTO instructor_stats(instructor, course_count) VALUES('DataJek', 5); 12SELECT * FROM instructor_stats; 13 14-- 为 instructor DataJek 的 course_count 增加 3 15UPDATE instructor_stats SET course_count = course_count + 3 WHERE instructor = 'DataJek'; 16SELECT * FROM instructor_stats WHERE instructor = 'DataJek'; 17 18-- 为 instructor 'DataJek' 的 likes 增加 1 19UPDATE instructor_stats SET likes = likes + 1 WHERE instructor = 'DataJek'; 20SELECT * FROM instructor_stats WHERE instructor = 'DataJek'; 21 22-- 为 instructor 'DataJek' 的 dislikes 减少 1 23UPDATE instructor_stats SET dislikes = dislikes - 1 WHERE instructor = 'DataJek'; 24SELECT * FROM instructor_stats WHERE instructor = 'DataJek'; 25 26UPDATE instructor_stats SET course_count = course_count + 2, likes = likes + 7, dislikes = dislikes + 1 WHERE instructor = 'DataJek'; 27SELECT * FROM instructor_stats WHERE instructor = 'DataJek'; 28 29-- 错误:尝试直接设置计数器列的值 30UPDATE instructor_stats SET likes = 100 WHERE instructor = 'DataJek'; 31 32-- 无法在更新计数器列时使用 USING TTL 或 TIMESTAMP 33UPDATE instructor_stats USING TTL 2000 SET likes = likes + 1 WHERE instructor = 'DataJek'; 34 35-- 包含 COUNTER 列的表只能包含主键或 COUNTER 列 36ALTER TABLE instructor_stats ADD instructor_id int; 37 38-- COUNTER 列不能作为表主键的一部分 39CREATE TABLE IF NOT EXISTS course_stats ( 40 course text, 41 subscriptions COUNTER, 42 likes COUNTER, 43 PRIMARY KEY (course, likes) 44 );
Terminal