标签:插入 character union mobile 语法 val rem general status
1.视图是MySQL5.0.1版本加入的功能,它可以理解为一个虚表。
2.只储存了一个结构,并不是存储真实的数据。它的数据是在查询过程中动态生成的。
3.视图并不是真正的优化
2.创建视图
数据表结构
mysql> desc user; +-----------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_name | varchar(50) | NO | | | | | password | varchar(64) | NO | | | | | mobile | varchar(20) | YES | | | | | email | varchar(50) | YES | | | | | last_login_time | int(11) | YES | | 0 | | | status | int(1) | NO | | 0 | | +-----------------+-------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec)
数据
mysql> select * from user; +----+------------+-----------------------+--------+-------+-----------------+--------+ | id | user_name | password | mobile | email | last_login_time | status | +----+------------+-----------------------+--------+-------+-----------------+--------+ | 12 | admin2 | sixstar206 | wq | qwqw | 0 | 1 | | 13 | admin3213 | sixstar20621321321321 | 12 | 121 | 0 | 0 | | 14 | admin123 | sixstar206 | qw | qw | 0 | 0 | | 16 | adminwfewf | sixstar206 | da | wq | 0 | 0 | | 17 | ad | sixstar206 | sad | ad | 0 | 0 | | 19 | ad12 | sixstar206 | ad | qw | 0 | 0 | | 23 | 1213123123 | sixstar206 | 12 | qw | 0 | 0 | | 24 | admfafaf | sixstar206 | 321 | qw | 0 | 0 | | 30 | 221 | 12 | | 12 | 0 | 1 | | 31 | 221 | 12 | | 12 | 0 | 0 | | 32 | 221 | 12 | | 12 | 0 | 0 | | 33 | fdsa | fwre | | | 0 | 1 | +----+------------+-----------------------+--------+-------+-----------------+--------+ 12 rows in set (0.00 sec)
创建视图
create view user_view as select id,user_name,password,status from user;
查看视图
mysql> desc user_view; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | 0 | | | user_name | varchar(50) | NO | | | | | password | varchar(64) | NO | | | | | status | int(1) | NO | | 0 | | +-----------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
查看视图语法
mysql> show create view user_view; +-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | View | Create View | character_set_client | collation_connection | +-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | user_view | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `user_view` AS select `user`.`id` AS `id`,`user`.`user_name` AS `user_name`,`user`.`password` AS `password`,`user`.`status` AS `status` from `user` | utf8 | utf8_general_ci | +-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 1 row in set (0.00 sec)
查看视图内容
mysql> select * from user_view; +----+------------+-----------------------+--------+ | id | user_name | password | status | +----+------------+-----------------------+--------+ | 12 | admin2 | sixstar206 | 1 | | 13 | admin3213 | sixstar20621321321321 | 0 | | 14 | admin123 | sixstar206 | 0 | | 16 | adminwfewf | sixstar206 | 0 | | 17 | ad | sixstar206 | 0 | | 19 | ad12 | sixstar206 | 0 | | 23 | 1213123123 | sixstar206 | 0 | | 24 | admfafaf | sixstar206 | 0 | | 30 | 221 | 12 | 1 | | 31 | 221 | 12 | 0 | | 32 | 221 | 12 | 0 | | 33 | fdsa | fwre | 1 | +----+------------+-----------------------+--------+ 12 rows in set (0.04 sec)
ps:视图查询的数据来自于原数据中的内容,而视图是一个存储了一个结构,并不是存储真是的数据
类似于php中封装了一个查询方法的封装
class db { public function select() { return ‘sql:select id,user,user_name,password,statud from user‘; } }
视图的优点:
1. 简化了操作(完全不用关心视图怎么处理数据,只需要知道如何使用这个结果集即可),视图相当于一个中间层。
2.安全 ,可以起到保护原表中的某些数据。
3.降低耦合(假如修改原表结构,可以通过修改视图的定义即可,而不用修改应用程序,对访问者不会造成影响)
视图缺点
1.表结构修改则需手动修改视图
视图IUD
表是可以更新数据的,这里的更新指的是“增删改”,但对于视图来说不一定。
/*修改视图数据*/
mysql> update user_view set status = 1 where id = 13;
/*查询视图数据*/ mysql> select * from user_view; +----+------------+-----------------------+--------+ | id | user_name | password | status | +----+------------+-----------------------+--------+ | 12 | admin2 | sixstar206 | 1 | | 13 | admin3213 | sixstar20621321321321 | 1 | | 14 | admin123 | sixstar206 | 0 | | 16 | adminwfewf | sixstar206 | 0 | | 17 | ad | sixstar206 | 0 | | 19 | ad12 | sixstar206 | 0 | | 23 | 1213123123 | sixstar206 | 0 | | 24 | admfafaf | sixstar206 | 0 | | 30 | 221 | 12 | 1 | | 31 | 221 | 12 | 0 | | 32 | 221 | 12 | 0 | | 33 | fdsa | fwre | 1 | +----+------------+-----------------------+--------+ 12 rows in set (0.00 sec)
删除视图
mysql> drop view user_view2;
以下是视图不可更新的情况
1.包含聚合函数、distinct、group by、having 、union、union all
2.常量视图
3.select包含子查询
4.包含连接操作
5.from一个不能更新的视图
6.where子句的子查询引用了from子句中的表
创建新的视图
mysql> create view user_view2 as select id,user_name,password,status from user where status = 0; Query OK, 0 rows affected (0.03 sec)
mysql> select * from user_view2; +----+------------+------------+--------+ | id | user_name | password | status | +----+------------+------------+--------+ | 14 | admin123 | sixstar206 | 0 | | 16 | adminwfewf | sixstar206 | 0 | | 17 | ad | sixstar206 | 0 | | 19 | ad12 | sixstar206 | 0 | | 23 | 1213123123 | sixstar206 | 0 | | 24 | admfafaf | sixstar206 | 0 | | 31 | 221 | 12 | 0 | | 32 | 221 | 12 | 0 | +----+------------+------------+--------+ 8 rows in set (0.01 sec)
新增数据 status =1
mysql> insert into user_view2(id,user_name,password,status) values (34,‘admin‘,‘admin‘,1); Query OK, 1 row affected (0.01 sec)
可以发现不满足视图的要求数据也可以插入基表
可以通过 with check option 设定只允许修改满足视图要求的数据,对于不满足视图要求的数据操作统统拒绝
mysql> create view user_view2 as select id,user_name,password,status from user where status = 0 where check option; Query OK, 0 rows affected (0.03 sec)
mysql> insert into user_view2(id,user_name,password,status) values (35,‘admin‘,‘admin‘,1); ERROR 1369 (HY000): CHECK OPTION failed ‘community.user_view2‘
视图应用&好处
1.提高了重要应,就像一个函数
如频繁的获取user表的name和goods表的name 使用链式语句
sql:select a.name as username,b.name as goodsname from user as a,goods as b,ng as c where a.id=c.uid and c.gid=b.id;
使用视图查询,创建视图 name
sql: create view name as select a.name as username,b.name as goodsname from user as a,goods as b,ng as c where a.id=c.uid and c.gid=b.id;
select * from name
可以直接通过视图获取user表的name和goods表的name
2.对数据库重构,不影响程序的运行
3.提高了安全性。针对不同用户
4.让数据更加清晰
标签:插入 character union mobile 语法 val rem general status
原文地址:https://www.cnblogs.com/ligq/p/10827890.html