福建巢网站建设,seo的工作流程,建站管理后台,安徽省工程建设信息网官方网站插入数据
在表中创建数据 您可以使用命令 INSERT 将数据插入表中一行的列中。 下面给出了在表中创建数据的语法。
INSERT INTO tablename
(column1 name, column2 name....)
VALUES (value1, value2....)
USING option
例子…插入数据
在表中创建数据 您可以使用命令 INSERT 将数据插入表中一行的列中。 下面给出了在表中创建数据的语法。
INSERT INTO tablename
(column1 name, column2 name....)
VALUES (value1, value2....)
USING option
例子 让我们假设有一个名为 emp 的表其中包含列emp_id、emp_name、emp_city、emp_phone、emp_sal您必须将以下数据插入到 emp 表中。
emp_idemp_nameemp_cityemp_phoneemp_sal1ramHyderabad9848022338500002robinHyderabad9848022339400003rahmanChennai984802233045000
cqlsh:tutorialspoint INSERT INTO emp (emp_id, emp_name, emp_city,emp_phone, emp_sal) VALUES(1,ram, Hyderabad, 9848022338, 50000);cqlsh:tutorialspoint INSERT INTO emp (emp_id, emp_name, emp_city,emp_phone, emp_sal) VALUES(2,robin, Hyderabad, 9848022339, 40000);cqlsh:tutorialspoint INSERT INTO emp (emp_id, emp_name, emp_city,emp_phone, emp_sal) VALUES(3,rahman, Chennai, 9848022330, 45000);
确认 插入数据后使用SELECT语句验证数据是否已经插入。 如果您使用 SELECT 语句验证 emp 表它将为您提供以下输出。
cqlsh:tutorialspoint SELECT * FROM emp;emp_id | emp_city | emp_name | emp_phone | emp_sal
--------------------------------------------------1 | Hyderabad | ram | 9848022338 | 500002 | Hyderabad | robin | 9848022339 | 400003 | Chennai | rahman | 9848022330 | 45000(3 rows) 使用 Java API 创建数据
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;public class Create_Data {public static void main(String args[]){//queriesString query1 INSERT INTO emp (emp_id, emp_name, emp_city, emp_phone, emp_sal) VALUES(1,ram, Hyderabad, 9848022338, 50000); ;String query2 INSERT INTO emp (emp_id, emp_name, emp_city,emp_phone, emp_sal) VALUES(2,robin, Hyderabad, 9848022339, 40000); ;String query3 INSERT INTO emp (emp_id, emp_name, emp_city, emp_phone, emp_sal) VALUES(3,rahman, Chennai, 9848022330, 45000); ;//Creating Cluster objectCluster cluster Cluster.builder().addContactPoint(127.0.0.1).build();//Creating Session objectSession session cluster.connect(tp);//Executing the querysession.execute(query1);session.execute(query2);session.execute(query3);System.out.println(Data created);}
} 更新数据
更新表中的数据 UPDATE 是用于更新表中数据的命令。 更新表中的数据时使用以下关键字 -
Where - 此子句用于选择要更新的行。
Set - 使用此关键字设置值。
Must - 包括构成主键的所有列。
更新行时如果给定行不可用则 UPDATE 会创建一个新行。 下面给出的是 UPDATE 命令的语法 -
UPDATE tablename
SET column name new value
column name value....
WHERE condition
现在让我们将 robin 的 emp_city 更新为德里并将他的薪水更新为 50000。下面给出的是执行所需更新的查询。
cqlsh:tutorialspoint UPDATE emp SET emp_cityDelhi,emp_sal50000WHERE emp_id2;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;public class Update_Data {public static void main(String args[]){//queryString query UPDATE emp SET emp_cityDelhi,emp_sal50000//Creating Cluster objectCluster cluster Cluster.builder().addContactPoint(127.0.0.1).build();//Creating Session objectSession session cluster.connect(tp);//Executing the querysession.execute(query);System.out.println(Data updated);}}查询数据
使用 Select 子句读取数据 SELECT 子句用于从 Cassandra 中的表中读取数据。 使用此子句您可以读取整个表格、单个列或特定单元格。 下面给出的是 SELECT 子句的语法。
SELECT FROM tablename
以下示例显示如何使用 SELECT 子句读取整个表。 在这里我们正在读取一个名为 emp 的表。
cqlsh:tutorialspoint select * from emp;emp_id | emp_city | emp_name | emp_phone | emp_sal
--------------------------------------------------1 | Hyderabad | ram | 9848022338 | 500002 | null | robin | 9848022339 | 500003 | Chennai | rahman | 9848022330 | 500004 | Pune | rajeev | 9848022331 | 30000(4 rows)
阅读必填栏目 以下示例显示如何读取表中的特定列。
cqlsh:tutorialspoint SELECT emp_name, emp_sal from emp;emp_name | emp_sal
-------------------ram | 50000robin | 50000rajeev | 30000rahman | 50000 (4 rows)
Where 子句 使用 WHERE 子句您可以对所需的列施加约束。 其语法如下 -
SELECT FROM table name WHERE condition;注意 - WHERE 子句只能用于作为主键的一部分或在其上具有二级索引的列。
在下面的示例中我们正在读取薪水为 50000 的员工的详细信息。首先将二级索引设置为列 emp_sal。 cqlsh:tutorialspoint CREATE INDEX ON emp(emp_sal);
cqlsh:tutorialspoint SELECT * FROM emp WHERE emp_sal50000;emp_id | emp_city | emp_name | emp_phone | emp_sal
--------------------------------------------------1 | Hyderabad | ram | 9848022338 | 500002 | null | robin | 9848022339 | 500003 | Chennai | rahman | 9848022330 | 50000 使用Java API
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Session;public class Read_Data {public static void main(String args[])throws Exception{//queriesString query SELECT * FROM emp;//Creating Cluster objectCluster cluster Cluster.builder().addContactPoint(127.0.0.1).build();//Creating Session objectSession session cluster.connect(tutorialspoint);//Getting the ResultSetResultSet result session.execute(query);System.out.println(result.all());}
}
删除数据
您可以使用命令 DELETE 从表中删除数据。 其语法如下 -
DELETE FROM identifier WHERE condition;
以下语句删除最后一行的 emp_sal 列 -
cqlsh:tutorialspoint DELETE emp_sal FROM emp WHERE emp_id3;
删除整行 以下命令从表中删除整行。
cqlsh:tutorialspoint DELETE FROM emp WHERE emp_id3;
使用Java API
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;public class Delete_Data {public static void main(String args[]){//queryString query DELETE FROM emp WHERE emp_id3;;//Creating Cluster objectCluster cluster Cluster.builder().addContactPoint(127.0.0.1).build();//Creating Session objectSession session cluster.connect(tp);//Executing the querysession.execute(query);System.out.println(Data deleted);}
} CQL 数据类型
CQL 提供了一组丰富的内置数据类型包括集合类型。 除了这些数据类型用户还可以创建自己的自定义数据类型。 下表提供了 CQL 中可用的内置数据类型列表。
数据类型关键字描述asciistrings表示 ASCII 字符串bigintbigint表示 64-bit signed longblobblobs表示任意常数 bytesBooleanbooleans表示 true or falsecounterintegers表示 计数器 columndecimalintegers, floats表示 decimaldoubleintegers表示64-bit IEEE-754 floating pointfloatintegers, floats表示 32-bit IEEE-754 floating pointinetstrings表示 IP地址 IPv4 or IPv6intintegers表示 32-bit signed inttextstrings表示 UTF8字符串timestampintegers, strings表示 timestamptimeuuiduuids表示 UUIDuuiduuids表示 1 或 4UUIDvarcharstrings表示uTF8字符串varintintegers表示任意精度整数 集合类型 Cassandra 查询语言还提供了集合数据类型。 下表提供了 CQL 中可用的集合列表。
集合描述list列表是一个或多个有序元素的集合。map映射是键值对的集合。set集合是一个或多个元素的集合。 用户定义的数据类型 Cqlsh 为用户提供了创建自己的数据类型的便利。 下面给出了处理用户定义的数据类型时使用的命令。
CREATE TYPE - 创建用户定义的数据类型。
ALTER TYPE - 修改用户定义的数据类型。
DROP TYPE - 删除用户定义的数据类型。
DESCRIBE TYPE - 描述用户定义的数据类型。
DESCRIBE TYPES - 描述用户定义的数据类型。 CQL集合
CQL 提供了使用集合数据类型的便利。 使用这些集合类型您可以将多个值存储在单个变量中。 本章介绍如何在 Cassandra 中使用集合。
列表 列表用于以下情况
要保持元素的顺序并且 一个值要存储多次。 您可以使用列表中元素的索引获取列表数据类型的值。
使用列表创建表 下面给出的示例创建了一个包含两列名称和电子邮件的示例表。 要存储多封电子邮件我们使用列表。
CREATE TABLE data(name text PRIMARY KEY, email listtext)
将数据插入列表 将数据插入列表中的元素时请在方括号 [ ] 内输入以逗号分隔的所有值如下所示。
cqlsh:tutorialspoint INSERT INTO data(name, email) VALUES (ramu,
[abcgmail.com,cbayahoo.com])
更新列表 下面给出了一个示例用于更新名为 data 的表中的列表数据类型。 在这里我们正在向列表中添加另一封电子邮件。
cqlsh:tutorialspoint UPDATE data
... SET email email [xyztutorialspoint.com]
... where name ramu;
确认 如果您使用 SELECT 语句验证表您将得到以下结果 -
cqlsh:tutorialspoint SELECT * FROM data;name | email
--------------------------------------------------------------------ramu | [abcgmail.com, cbayahoo.com, xyztutorialspoint.com](1 rows) Set Set 是一种数据类型用于存储一组元素。 集合的元素将按排序顺序返回。
使用 Set 创建表 以下示例创建一个包含两列的示例表名称和电话。 为了存储多个电话号码我们使用 set。
CREATE TABLE data2 (name text PRIMARY KEY, phone setvarint);
将数据插入集合 在将数据插入集合中的元素时在花括号 { } 内输入以逗号分隔的所有值如下所示。
INSERT INTO data2(name, phone)VALUES (rahman, {9848022338,9848022339});
更新集合 以下代码显示如何更新名为 data2 的表中的集合。 在这里我们正在向集合中添加另一个电话号码。
cqlsh:tutorialspoint UPDATE data2... SET phone phone {9848022330}... where name rahman;
确认 如果您使用 SELECT 语句验证表您将得到以下结果 -
cqlsh:tutorialspoint SELECT * FROM data2;name | phone
----------------------------------------------rahman | {9848022330, 9848022338, 9848022339}(1 rows) Map Map 是一种数据类型用于存储元素的键值对。 以下示例显示如何创建一个包含两列名称和地址的示例表。 为了存储多个地址值我们使用 map。
CREATE TABLE data3 (name text PRIMARY KEY, address
maptimestamp, text);
将数据插入Map 将数据插入Map中的元素时在花括号 {} 内输入所有键值对以逗号分隔如下所示。
INSERT INTO data3 (name, address)VALUES (robin, {home : hyderabad , office : Delhi } );
更新Map 以下代码显示如何更新名为 data3 的表中的地图数据类型。 这里我们改变的是key office 的值也就是说我们改变的是一个叫robin 的人的办公室地址。
cqlsh:tutorialspoint UPDATE data3... SET address address{office:mumbai}... WHERE name robin;
确认 如果您使用 SELECT 语句验证表您将得到以下结果 -
cqlsh:tutorialspoint select * from data3;name | address
--------------------------------------------------robin | {home: hyderabad, office: mumbai}(1 rows) CQL 用户定义的数据类型
CQL 提供了创建和使用用户定义数据类型的便利。 您可以创建一个数据类型来处理多个字段。 本章说明如何创建、更改和删除用户定义的数据类型。
创建用户定义的数据类型 命令 CREATE TYPE 用于创建用户定义的数据类型。 其语法如下 -
CREATE TYPE keyspace name. data typename
( variable1, variable2).
例子 下面给出了创建用户定义数据类型的示例。 在此示例中我们正在创建一个包含以下详细信息的 card_details 数据类型。
属性属性名数据类型credit card nonumintcredit card pinpinintname on credit cardnametextcvvcvvintContact details of card holderphoneset
cqlsh:tutorialspoint CREATE TYPE card_details (... num int,... pin int,... name text,... cvv int,... phone setint
... );
注意 - 用于用户定义数据类型的名称不应与保留类型名称一致。
确认 使用 DESCRIBE 命令验证创建的类型是否已创建。
CREATE TYPE tutorialspoint.card_details (num int,pin int,name text,cvv int,phone setint);更改用户定义的数据类型 ALTER TYPE - 命令用于改变现有的数据类型。 使用 ALTER您可以添加新字段或重命名现有字段。
向类型添加字段 使用以下语法将新字段添加到现有的用户定义数据类型。
ALTER TYPE typename
ADD field_name field_type; 以下代码将新字段添加到 Card_details 数据类型。 在这里我们添加了一个名为 email 的新字段。
cqlsh:tutorialspoint ALTER TYPE card_details ADD email text;
确认 使用 DESCRIBE 命令验证是否添加了新字段。
cqlsh:tutorialspoint describe type card_details;
CREATE TYPE tutorialspoint.card_details (num int,pin int,name text,cvv int,phone setint,);
重命名类型中的字段 使用以下语法重命名现有的用户定义数据类型。
ALTER TYPE typename
RENAME existing_name TO new_name;
例子
cqlsh:tutorialspoint ALTER TYPE card_details RENAME email TO mail;
验证
cqlsh:tutorialspoint describe type card_details;
CREATE TYPE tutorialspoint.card_details (num int,pin int,name text,cvv int,phone setint,mail text);
删除用户定义的数据类型 DROP TYPE 是用于删除用户定义数据类型的命令。 下面给出了删除用户定义数据类型的示例。
例子 在删除之前使用 DESCRIBE_TYPES 命令验证所有用户定义数据类型的列表如下所示。
cqlsh:tutorialspoint DESCRIBE TYPES;
card_details card
从这两种类型中删除名为 card 的类型如下所示。
cqlsh:tutorialspoint drop type card;
使用 DESCRIBE 命令验证数据类型是否被丢弃。
cqlsh:tutorialspoint describe types;card_details 写在最后
推荐大家在实际的环境中使用ScyllaDBScyllaDB是用C重写的Cassandra其官网宣称其每节点每秒可处理100万TPS。ScyllaDB完全兼容Apache Cassandra拥有比Cassandra多10X倍的吞吐量并降低了延迟。ScyllaDB是性能优异的NoSQL列存储数据库。
ScyllaDB在垃圾收集或者Compaction的时候不需要暂停但是通过压测和Longevity测试发现Compaction的过程中对性能还是有很大影响。
ScyllaDB在常规生产负载的时候可以添加或删除节点通过nodetool来同步数据。
ScyllaDB是一个P2P的分布式系统集群中各节点之间相互平等。其数据分布于集群中的各节点各节点之间每秒钟交换一次信息。
其每个节点使用Commit Log提交日志捕获写操作来保持数据的正确性。数据首先被写入MemTable内存中的数据结构中。当MemTable满后数据被写入SSTable存储在硬盘上的数据文件中。
用户可以使用类似于SQL的CQL来查询数据。用户可以链接至集群中的任意节点。
在集群中一个Keyspace代表关系数据库中的一个数据库。一个Keyspace中可以包含多个表。