mysql 如何判断视图已存在

mysql 如何判断视图已存在,第1张

select count(information_schemaVIEWSTABLE_SCHEMA) from information_schemaVIEWS where information_schemaVIEWSTABLE_NAME=视图名称 and (information_schemaVIEWSTABLE_SCHEMA=数据库名称);

为1的话就是存在,0的话就是不存在。

友情提示:Mysql数据库版本太低的话是没有 information_schema 这个系统数据库的哦,以上语句只在 Mysql51 下测试通过哦~

视图2个用处,一个是方便查询,比如下面的例子:

SQL> CREATE VIEW

2 v_sale_report_sum

3 AS

4 SELECT

5 sale_item,

6 SUM(sale_money) AS sale_money

7 FROM

8 sale_report

9 GROUP BY

10 sale_item;

View created

SQL> SELECT FROM v_sale_report_sum;

不使用视图的话,你每查询一次,都要写一段很长的 SQL 语句。又是SUM 又是GROUP BY的。

有了视图以后,一行SQL就解决问题。

还有一个用处,就是安全方面上的设置需要。

比如 人力资源那里,有一个员工表,里面有

员工的姓名、性别、生日、籍贯、工作年限、工资、所属部门 等信息。

人力资源的人,希望你帮忙写一个2011年,工作排版表的程序,但是又不希望你“知道得太多”。

那么就创建一个视图

CREATE VIEW v_员工 AS

SELECT

姓名, 性别, 所属部门

FROM

员工表

然后就给你一个 v_员工 的 检索权限,让你去写 排班程序去了。

mysql 与 oracle 都有视图

procedure 也就是存储过程,也就是某些与数据库 *** 作比较紧密的 *** 作,写在存储过程里面,比写在 java 或者 C# 之类的外部,效果要好一些。

例如一个百货商店的数据库,每天晚上营业结束了,要统计销售额,然后计算每个商品分类下面,当天的营业额是多少,然后将统计数据,插入到 统计表中。

这些 *** 作,基本上就是 SELECT SUM / GROUP BY , 然后 INSERT INTO 的 *** 作。

直接在数据库内部处理就可以了。

没必要把一大堆查询结果,先传递到外边的一个 java 或者 c#写的客户端。

然后再通过 客户端传递一大堆的 INSERT INTO 语句回来。

创建视图的理想步骤: 一般来说,视图创建可以分为五步走: 第一步:先考虑select语句的编写。我们知道,视图其实就是一个select语句的集合,所以,我们建立视图的第一步,就是考虑这个select语句的如何编写。这个select语句编写的是否合理,执行效率的高低直接影响着这个视图的性能,在Select语句中,可能还会有格式的控制、内容的编排等等。如在Select语句中,可以把一些字段合并成一个字段;也可以把相关的内容进行倒置等等。这些功能都是Select语句完成的。所以可以这么说,Select语句的编写是视图建立的基础。 第二步:对这个Select语句进行测试。当我们编写好Select语句之后,就需要在数据库中执行这条语句,看其能否查询到我们想要的值。在对 Select语句进行测试的时候,需要注意一个问题,有时候Select查询语句可以查到准确的数据,但是在以这条语句建立视图的时候,可能就会通不过。 如在一些表之间的连接查询的时候,如果两个表中有个字段名相同,是可以的。因为他们除了字段名字之外,还有表名一起来定义这个字段。如Aname与 Bname。这是不算重名的。但是,若在建立视图的时候,这就会被认为是重复的列明,需要对其中的一个列名进行重定义。这一点在数据库视图建立的时候, 要特别的注意。第三步:考虑查询结果的准确性。

问题一:为什么MYSQL很少人用视图?

      答:mysql并不是很少人用,而是大部分一般直接通过sql查询的方式来实现类似view功能,不愿意 去增加这么一个过程,其实增加view还是有很多好处:

简单性。视图不仅可以简化用户对数据的理解,也可以简化他们的 *** 作。

安全性。通过视图用户只能查询和修改他们所能见到的数据。

逻辑数据独立性。视图可以使应用程序和数据库表在一定程度上独立。

问题二:MySQL和MSSQL有哪些本质区别?

   答:MySQL可以说是MSSQL的简化版本。理念相同,但MySQL的实现比MSSQL的需求低。MySQL是一个免费的、开放源代码的SQL数据库,所以免费的MYSQL很受欢迎,

TABLE 语句

具体语法:TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]

其实从语法上看,可以排序,也可以过滤记录集,不过比较简单,没有 SELECT 那么强大。

示例 1

简单的建一张很小的表 y1,记录数为 10 条。表 t1,插入 10 条记录

mysql-(ytt/3305)->create table t1 (r1 int,r2 int);

Query OK, 0 rows affected (002 sec)

mysql-(ytt/3305)->insert into t1

with recursive aa(a,b) as (

select 1,1

union all

select a+1,ceil(rand()20) from aa where a < 10

) select from aa;

Query OK, 10 rows affected (000 sec)

Records: 10  Duplicates: 0  Warnings: 0

简单全表扫描mysql-(ytt/3305)->select from t1;+------+------+| r1   | r2   |+------+------+|    1 |    1 ||    2 |    9 ||    3 |    9 ||    4 |   17 ||    5 |   17 ||    6 |   16 ||    7 |    6 ||    8 |    1 ||    9 |   10 ||   10 |    3 |+------+------+10 rows in set (000 sec)

TABLE 结果mysql-(ytt/3305)->table t1;+------+------+| r1   | r2   |+------+------+|    1 |    1 ||    2 |    9 ||    3 |    9 ||    4 |   17 ||    5 |   17 ||    6 |   16 ||    7 |    6 ||    8 |    1 ||    9 |   10 ||   10 |    3 |+------+------+10 rows in set (000 sec)

看下 table 的执行计划mysql-(ytt/3305)->explain table t1 order by r1 limit 2\G 1 row           id: 1  select_type: SIMPLE        table: t1   partitions: NULL         type: ALLpossible_keys: NULL          key: NULL      key_len: NULL          ref: NULL         rows: 10     filtered: 10000        Extra: Using filesort1 row in set, 1 warning (000 sec)

其实可以看到 TABLE 内部被 MySQL 转换为 SELECT 了。mysql-(ytt/3305)->show warnings\G 1 row  Level: Note   Code: 1003Message: / select#1 / select `ytt``t1``r1` AS `r1`,`ytt``t1``r2` AS `r2` from `ytt``t1` order by `ytt``t1``r1` limit 21 row in set (000 sec)

那其实从上面简单的例子可以看到 TABLE 在内部被转成了普通的 SELECT 来处理。示例 2应用于子查询里的子表。这里要注意,内表的字段数量必须和外表过滤的字段数量一致。克隆表 t1 结构mysql-(ytt/3305)->create table t2 like t1;Query OK, 0 rows affected (002 sec)

克隆表 t1 数据mysql-(ytt/3305)->insert into t2 table t1;Query OK, 10 rows affected (000 sec)Records: 10  Duplicates: 0  Warnings: 0

table t1 被当做内表,表 t1 有两个字段,必须同时满足 t2 检索时过滤的字段也是两个。mysql-(ytt/3305)->select from t2 where (r1,r2) in (table t1);+------+------+| r1   | r2   |+------+------+|    1 |    1 ||    2 |    9 ||    3 |    9 ||    4 |   17 ||    5 |   17 ||    6 |   16 ||    7 |    6 ||    8 |    1 ||    9 |   10 ||   10 |    3 |+------+------+10 rows in set (000 sec)

注意:这里如果过滤的字段数量和子表数量不一致,则会报错。

以上就是关于mysql 如何判断视图已存在全部的内容,包括:mysql 如何判断视图已存在、mysql数据库视图是什么什么时候必须建视图我从网上查了,但是感觉还是很模糊、如何在MySQL中利用数据库表创建视图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10196692.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存