MySQL视图

11.1 视图简述

  • 含义:视图是一个虚拟表,是从数据库中一个或多个表中导出的表。通过视图看到的数据只是存放在基本表中的数据。当对通过视图看到的数据进行修改时,相应的基本表数据也会修改;基本表数据变化视图也会发生变化。
  • 作用:
    • 简单化:看到的就是需要的。
    • 安全性:通过视图,用户只能查询和修改自己能看到的。



11.2 创建视图

创建视图的基本语法

  • 在单表上创建
mysql> CREATE VIEW view_p AS SELECT id,name FROM person;
Query OK, 0 rows affected (0.02 sec)

+----+------+
| id | name |
+----+------+
|  1 | zs   |
|  2 | ls   |
|  3 | we   |
|  4 | ld   |
|  5 | xd   |
|  6 | xm   |
+----+------+
mysql> CREATE VIEW view_p2 (pid,pname) AS SELECT id,name FROM person WHERE id>2;
Query OK, 0 rows affected (0.02 sec)
-----+
| pid | pname |
+-----+-------+
|   3 | we    |
|   4 | ld    |
|   5 | xd    |
|   6 | xm    |
+-----+-------+
  • 在多表上创建
mysql> CREATE VIEW person_fruits (ID,NAME) AS SELECT person.id,fruits.name
    -> FROM person ,fruits WHERE person.id=fruits.id;
Query OK, 0 rows affected (0.02 sec)

若不指定where子句,会发生笛卡尔积现象。

+----+-------+
| ID | NAME  |
+----+-------+
|  1 | apple |
|  2 | pear  |
|  3 | malon |
+----+-------+
3 rows in set (0.01 sec)



11.3 查看视图

  • DESC查看
mysql> desc view_p;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | 0       |       |
| name  | varchar(11) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
  • SHOW TABLE STATUS语句查看
mysql> SHOW TABLE STATUS LIKE 'view_p'\G
*************************** 1. row ***************************
           Name: view_p
         Engine: NULL
        Version: NULL
     Row_format: NULL
           Rows: NULL
 Avg_row_length: NULL
    Data_length: NULL
Max_data_length: NULL
   Index_length: NULL
      Data_free: NULL
 Auto_increment: NULL
    Create_time: NULL
    Update_time: NULL
     Check_time: NULL
      Collation: NULL
       Checksum: NULL
 Create_options: NULL
        Comment: VIEW
1 row in set (0.00 sec)
  • 通过SHOW CREATE VIEW查看
mysql> SHOW CREATE VIEW view_p\G
*************************** 1. row ***************************
                View: view_p
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_p` AS select `person`.`id` AS `id`,`person`.`name` AS `name` from `person`
character_set_client: gbk
collation_connection: gbk_chinese_ci
1 row in set (0.00 sec)
  • 在VIEW表中查看
    MySQL中,information_schema数据库下的views 表存储了所有视图的定义。
mysql> SELECT * FROM information_schema.views\G
*************************** 1. row ***************************
       TABLE_CATALOG: def
        TABLE_SCHEMA: myl
          TABLE_NAME: person_fruits
     VIEW_DEFINITION: select `myl`.`person`.`id` AS `ID`,`myl`.`fruits`.`name` AS `NAME` from `myl`.`person` join `myl`.`fruits` where (`myl`.`person`.`id` = `myl`.`fruits`.`id`)
        CHECK_OPTION: NONE
        IS_UPDATABLE: YES
             DEFINER: root@localhost
       SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: gbk
COLLATION_CONNECTION: gbk_chinese_ci

上述操作在实际操作中,一共查出了110条记录(3条记录是我添加的记录)



11.4 修改视图

  • 使用CREATE OR REPLEACE VIEW
mysql> CREATE OR REPLACE VIEW view_p AS SELECT * FROM person;
Query OK, 0 rows affected (0.02 sec)
  • 使用ALTER
mysql> ALTER VIEW view_p AS SELECT id,age FROM person WHERE id<3;
Query OK, 0 rows affected (0.02 sec)



11.5 更新视图

更新视图指通过视图来插入、更新、删除表中的数据。

  • 插入:向基本表中插入数据,视图也会变化
mysql> select * from fruits;
+------+-------+
| id   | name  |
+------+-------+
|    1 | apple |
|    2 | pear  |
|    3 | malon |
+------+-------+
3 rows in set (0.00 sec)

mysql> insert into fruits values(4,'water');
Query OK, 1 row affected (0.01 sec)

mysql> select * from fruits;
+------+-------+
| id   | name  |
+------+-------+
|    1 | apple |
|    2 | pear  |
|    3 | malon |
|    4 | water |
+------+-------+
4 rows in set (0.00 sec)
  • 更新(修改):
mysql> UPDATE view_f SET name='banana' WHERE id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
  • 删除:
mysql> DELETE FROM view_f WHERE id=2;
Query OK, 1 row affected (0.01 sec)

mysql> select * from view_f;
+------+-------+
| id   | name  |
+------+-------+
|    1 | apple |
|    3 | malon |
|    4 | water |
+------+-------+
3 rows in set (0.00 sec)

视图中包含以下内容时,视图的更新操作将不能被执行:

  • 不包含基表中被定义为非空的列。
  • 在定义视图的SELECT语句后的字段列表中使用了数学表达式,聚合函数,DISTINCT,UNION,TOP,GROUP BY ,HAVING子句。



11.6 删除视图

mysql> DROP VIEW IF EXISTS view_f,view_p,person_fruits,p;
Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值