
# 如何使用物化视图
#### 什么是物化视图
物化视图本质上是由数据库自动维护的标准cql表，自动维护符合条件的数据与源表数据的一致性。
#### 使用限制
- 物化视图的primary key必须包含源表的所有primary key，不允许使用静态列。
- 视图中primary key的所有列必须是"IS NOT NULL"。
- 任何物化视图中，必须将一个cql行从源表映射到物化视图的另一行，即视图和源表之间的行是逐一对应的。
- 创建物化视图的select语句的where条件中，不能对视图的非primary key列进行限制，"IS NOT NULL"除外。
  图1示例   
  ![](https://support.huaweicloud.com/cassandraug-nosql/zh-cn_image_0000001118845514.png "点击放大") 
- 不支持使用静态列、counter、superColumn、duration类型。
 
#### 如何使用物化视图
1. 在源表中插入一条记录，并查询结果。 源表示例：
   ```
   CREATE TABLE person (
      id int,
      name text,
      addr text,
      age int,
      email text,
      PRIMARY KEY (id, name));
   ```
   插入一条记录：
   **insert into person(id, name, age, addr, email) values (0, 'ruby', 26, 'beijing', 'ruby@email.com');**
   查看数据插入结果：
   图2查询结果   
   ![](https://support.huaweicloud.com/cassandraug-nosql/zh-cn_image_0000001165805203.png) 
2. 创建物化视图。 **CREATE MATERIALIZED VIEW person_addr AS**
   **SELECT \* from person WHERE id IS NOT NULL AND addr IS NOT NULL AND name IS NOT NULL**
   **primary key (addr, id, name);**
   "system_schema.views"记录了视图和源表的关联关系：
   图3视图与源表的关联关系   
   ![](https://support.huaweicloud.com/cassandraug-nosql/zh-cn_image_0000001165885235.png "点击放大")
   不符合该条件的查询不显示，示例：IS NOT NULL。
   
3. 插入"addr"为"null"的记录。 **insert into person(id, name, age, addr, email) values (1, 'mike', 30, null, 'mike@email.com');**
   查看源表数据和物化视图数据：
   图4查询结果   
   ![](https://support.huaweicloud.com/cassandraug-nosql/zh-cn_image_0000001165805201.png "点击放大") 
4. 删除物化视图。
   **DROP MATERIALIZED VIEW person_adder;**
   图5删除视图   
   ![](https://support.huaweicloud.com/cassandraug-nosql/zh-cn_image_0000001165885237.png) 
 
