一:视图
刚入职时看项目代码时发现有的表在数据库的表中没有找到,就感觉很奇怪,明明可以查出数据为什么就是找不到对应的表呢?后来问过指导人之后才知道那是视图,唉,小白。。。
视图是一种虚拟表,其本身不存储数据,而是按照指定的方式进行查询。白话就是:如果涉及到多表关联查询,那么如果不使用视图的话你每需要查询一次数据就得在代码中写一次的sql,效率很低,视图就是为了解决这种情况的(单表查询也可以使用)。
1.创建视图的语句:
CREATE VIEW 视图名(列1,列2...)
AS SELECT (列1,列2...)
FROM ...;
2.修改视图的语句:
CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
3.查看视图详情的语句:
DESC 视图名;
或者
SHOW FIELDS FROM 视图名;
demo:如果我想从user和orders这两张表中关联查出用户的订单量,如果不用视图:
SELECT
`u`.`username` AS `用户名`,
`u`.`birthday` AS `生日`,
`u`.`sex` AS `性别`,
`o`.`number` AS `订单量`
FROM (`user` `u`
JOIN `orders` `o`)
WHERE (`o`.`user_id` = `u`.`id`)
每次查询都得写sql,但是如果创建一个视图,语句如下:
DROP VIEW IF EXISTS `orders_user_info`
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `orders_user_info` AS
SELECT
`u`.`username` AS `username`,
`u`.`birthday` AS `birthday`,
`u`.`sex` AS `sex`,
`o`.`number` AS `number`
FROM (`user` `u`
JOIN `orders` `o`)
WHERE (`o`.`user_id` = `u`.`id`)
DELIMITER ;
那么我想查询的话就只需要执行一下:
select * from order_user_info;
感觉清爽了很多!