如何在MySQL中创建视图

如何在MySQL中创建视图,第1张

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

VIEW view_name [(column_list)]

AS select_statement

[WITH [CASCADED | LOCAL] CHECK OPTION]

语句能创建新的视图,如果给定了OR REPLACE子句,该语句还能替换已有的视图。select_statement是一种SELECT语句,它给出了视图的定义。该语句可从基表或其他视图进行选择。

该语句要求具有针对视图的CREATE VIEW权限,以及针对由SELECT语句选择的每一列上的某些权限。对于在SELECT语句中其他地方使用的列,必须具有SELECT权限。如果还有OR REPLACE子句,必须在视图上具有DROP权限。

视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时,应将名称指定为db_nameview_name。

mysql> CREATE VIEW testv AS SELECT FROM t;

表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。

视图必须具有唯一的列名,不得有重复,就像基表那样。默认情况下,由SELECT语句检索的列名将用作视图列名。要想为视图列定义明确的名称,可使用可选的column_list子句,列出由逗号隔开的ID。column_list中的名称数目必须等于SELECT语句检索的列数。

SELECT语句检索的列可以是对表列的简单引用。也可以是使用函数、常量值、 *** 作符等的表达式。

对于SELECT语句中不合格的表或视图,将根据默认的数据库进行解释。通过用恰当的数据库名称限定表或视图名,视图能够引用表或其他数据库中的视图。

能够使用多种SELECT语句创建视图。视图能够引用基表或其他视图。它能使用联合、UNION和子查询。SELECT甚至不需引用任何表。在下面的示例中,定义了从另一表选择两列的视图,并给出了根据这些列计算的表达式:

mysql> CREATE TABLE t (qty INT, price INT);

mysql> INSERT INTO t VALUES(3, 50);

mysql> CREATE VIEW v AS SELECT qty, price, qtyprice AS value FROM t;

mysql> SELECT FROM v;

+------+-------+-------+

| qty | price | value |

+------+-------+-------+

| 3 | 50 | 150 |

+------+-------+-------+

视图定义服从下述限制:

· SELECT语句不能包含FROM子句中的子查询。

· SELECT语句不能引用系统或用户变量。

· SELECT语句不能引用预处理语句参数。

· 在存储子程序内,定义不能引用子程序参数或局部变量。

· 在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句。

· 在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图。

· 在视图定义中命名的表必须已存在。

· 不能将触发程序与视图关联在一起。

在视图定义中允许使用ORDER BY,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY的语句,它将被忽略。

对于定义中的其他选项或子句,它们将被增加到引用视图的语句的选项或子句中,但效果未定义。例如,如果在视图定义中包含LIMIT子句,而且从特定视图进行了选择,而该视图使用了具有自己LIMIT子句的语句,那么对使用哪个LIMIT未作定义。相同的原理也适用于其他选项,如跟在SELECT关键字后的ALL、DISTINCT或SQL_SMALL_RESULT,并适用于其他子句,如INTO、FOR UPDATE、LOCK IN SHARE MODE、以及PROCEDURE。

如果创建了视图,并通过更改系统变量更改了查询处理环境,会影响从视图获得的结果:

mysql> CREATE VIEW v AS SELECT CHARSET(CHAR(65)), COLLATION(CHAR(65));

Query OK, 0 rows affected (000 sec)

mysql> SET NAMES 'latin1';

Query OK, 0 rows affected (000 sec)

mysql> SELECT FROM v;

+-------------------+---------------------+

| CHARSET(CHAR(65)) | COLLATION(CHAR(65)) |

+-------------------+---------------------+

| latin1 | latin1_swedish_ci |

+-------------------+---------------------+

1 row in set (000 sec)

mysql> SET NAMES 'utf8';

Query OK, 0 rows affected (000 sec)

mysql> SELECT FROM v;

+-------------------+---------------------+

| CHARSET(CHAR(65)) | COLLATION(CHAR(65)) |

+-------------------+---------------------+

| utf8 | utf8_general_ci |

+-------------------+---------------------+

1 row in set (000 sec)

可选的ALGORITHM子句是对标准SQL的MySQL扩展。ALGORITHM可取三个值:MERGE、TEMPTABLE或UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。算法会影响MySQL处理视图的方式。

对于MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。

对于TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。

对于UNDEFINED,MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。

明确选择TEMPTABLE的1个原因在于,创建临时表之后、并在完成语句处理之前,能够释放基表上的锁定。与MERGE算法相比,锁定释放的速度更快,这样,使用视图的其他客户端不会被屏蔽过长时间。

视图算法可以是UNDEFINED,有三种方式:

· 在CREATE VIEW语句中没有ALGORITHM子句。

· CREATE VIEW语句有1个显式ALGORITHM = UNDEFINED子句。

· 为仅能用临时表处理的视图指定ALGORITHM = MERGE。在这种情况下,MySQL将生成告警,并将算法设置为UNDEFINED。

正如前面所介绍的那样,通过将视图定义中的对应部分合并到引用视图的语句中,对MERGE进行处理。在下面的示例中,简要介绍了MERGE的工作方式。在该示例中,假定有1个具有下述定义的视图v_merge:

CREATE ALGORITHM = MERGE VIEW v_merge (vc1, vc2) AS

SELECT c1, c2 FROM t WHERE c3 > 100;

示例1:假定发出了下述语句:

SELECT FROM v_merge;

MySQL以下述方式处理语句:

· v_merge成为t

· 成为vc1、vc2,与c1、c2对应

· 增加视图WHERE子句

所产生的将执行的语句为:

SELECT c1, c2 FROM t WHERE c3 > 100;

示例2:假定发出了下述语句:

SELECT FROM v_merge WHERE vc1 < 100;

该语句的处理方式与前面介绍的类似,但vc1 < 100变为c1 < 100,并使用AND连接词将视图的WHERE子句添加到语句的WHERE子句中(增加了圆括号以确保以正确的优先顺序执行子句部分)。所得的将要执行的语句变为:

SELECT c1, c2 FROM t WHERE (c3 > 100) AND (c1 < 100);

事实上,将要执行的语句是具有下述形式的WHERE子句:

WHERE (select WHERE) AND (view WHERE)

MERGE算法要求视图中的行和基表中的行具有一对一的关系。如果不具有该关系。必须使用临时表取而代之。如果视图包含下述结构中的任何一种,将失去一对一的关系:

· 聚合函数(SUM(), MIN(), MAX(), COUNT()等)。

· DISTINCT

· GROUP BY

· HAVING

· UNION或UNION ALL

· 仅引用文字值(在该情况下,没有基本表)。

某些视图是可更新的。也就是说,可以在诸如UPDATE、DELETE或INSERT等语句中使用它们,以更新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。更具体地讲,如果视图包含下述结构中的任何一种,那么它就是不可更新的:

· 聚合函数(SUM(), MIN(), MAX(), COUNT()等)。

· DISTINCT

· GROUP BY

· HAVING

· UNION或UNION ALL

· 位于选择列表中的子查询

· Join

· FROM子句中的不可更新视图

· WHERE子句中的子查询,引用FROM子句中的表。

· 仅引用文字值(在该情况下,没有要更新的基本表)。

· ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。

关于可插入性(可用INSERT语句更新),如果它也满足关于视图列的下述额外要求,可更新的视图也是可插入的:

· 不得有重复的视图列名称。

· 视图必须包含没有默认值的基表中的所有列。

· 视图列必须是简单的列引用而不是导出列。导出列不是简单的列引用,而是从表达式导出的。下面给出了一些导出列示例:

· 314159

· col1 + 3

· UPPER(col2)

· col3 / col4

· (subquery)

混合了简单列引用和导出列的视图是不可插入的,但是,如果仅更新非导出列,视图是可更新的。考虑下述视图:

CREATE VIEW v AS SELECT col1, 1 AS col2 FROM t;

该视图是不可插入的,这是因为col2是从表达式导出的。但是,如果更新时不更新col2,它是可更新的。这类更新是允许的:

UPDATE v SET col1 = 0;

下述更新是不允许的,原因在于,它试图更新导出列:

UPDATE v SET col2 = 0;

在某些情况下,能够更新多表视图,假定它能使用MERGE算法进行处理。为此,视图必须使用内部联合(而不是外部联合或UNION)。此外,仅能更新视图定义中的单个表,因此,SET子句必须仅命名视图中某一表的列。即使从理论上讲也是可更新的,不允许使用UNION ALL的视图,这是因为,在实施中将使用临时表来处理它们。

对于多表可更新视图,如果是将其插入单个表中,INSERT能够工作。不支持DELETE。

对于可更新视图,可给定WITH CHECK OPTION子句来防止插入或更新行,除非作用在行上的select_statement中的WHERE子句为“真”。

在关于可更新视图的WITH CHECK OPTION子句中,当视图是根据另一个视图定义的时,LOCAL和CASCADED关键字决定了检查测试的范围。LOCAL关键字对CHECK OPTION进行了限制,使其仅作用在定义的视图上,CASCADED会对将进行评估的基表进行检查。如果未给定任一关键字,默认值为CASCADED。

可以使用 CREATE VIEW 语句来创建视图。

语法格式如下:

CREATE VIEW <视图名> AS <SELECT语句>

如:

CREATE VIEW view_students_info

AS SELECT FROM tb_students_info

1、选择服务视图,然后展开DataBase(数据库节点),右键点击JavaDB

2、启动服务器

3、然后在右键单击JavaDB,选择创建数据库

4、然后在d出的对话框中填写相应的名称,写完后点击确定完成的数据的创建。

打开navicat for mysql软件之后打开相应的数据库。然后点击视图。

点击新建视图。这里的话你可以通过sql语句来创建。

当然也可以选择navicat for mysql视图创建工具来创建。如图,把表一个一个的挪过去,如果你的表设计主外键的关联关系没问题的话,它们就会自动的连上线了。

然后如图所示为你要展示的内容打上勾,点击保存就可以了。(注意一定要选择,不能都是空)

用工具创建好视图之后呢,你可以点击定义查看刚才视图相应的sql语句,这是navicat for mysql

然后点击数据库下视图,你就可以查看你刚才所创建的视图效果了。你可以看到视图本质其实就是一张合成表。

使用create view语句就可以创建视图了,具体语句如下:

create view  viewname as select from Tab_EdsProd(Tab_EdsProd是表的名字)where (后面可以接一线限制的条件)。

删除视图:drop view viewname。

扩展资料

视图的作用:

1、使用视图,可以定制用户数据,聚焦特定的数据。

2、使用视图,可以简化数据 *** 作。

3、使用视图,基表中的数据就有了一定的安全性。因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,可以不通过视图给用户。

视图是动态的数据的集合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改和删除,可以保证数据的安全性。

4、使用视图可以合并分离的数据,创建分区视图。

参考资料:百度百科-sql语句大全

问题一:创建数据库的两种方法 交互式创建,就是你右击数据库然后选择新建数据库按钮就可以还有一种就是sql语句创建比如创建一个数据库名为a 的数据库,那么sql语句就是,create database a;然后执行下就可以

问题二:如何用MySQL建立数据库 这很简单啊!

在Windows下,假如你的MySQL装在 D:\MySQL

就可以这样:

先切换到它的bin目录

cd D:\MySQL\bin\

抚:\MySQL\bin>mysql -u root -p

接着输入你的root密码

接下来你就可以创建数据库、创建用户、创建修改表之类的 *** 作(常用命令如下)。

查看现有数据库

mysql> show databases;

创建数据库(假如数据库名为 mydb)

mysql> create database mydb;

删除数据库(假如数据库名为 mydb)

mysql> drop database accounts;

使用数据库(假如使用数据库 mydb)

mysql> use mydb;

执行完使用数据库命令后,就可以对该数据库进行创建、修改、插入、删除表等 *** 作,这些表的 *** 作命令你可以到网上找找,不是很难的。一个数据库就相当于一个 Excel 文件,而表则相当于Excel文件的单元格,数据就是存放在表中。

问题三:怎样建立一个简单数据库? 把excel导入数据库,不出现表格嵌套可以使用下面这个方法导入;

思路:

(1)、把excel数据读入到dataset中;

(2)、建立相应结构的数据表格

(3)、把dat畅set中的数据更新到数据表中

问题四:如何用数据库向导创建数据库 Microsoft Access 提供了三种方法来创建 Access 数据库 (Microsoft Access 数据库:数据和对象(如表、查询或窗体)组成的 ,与特定的主题或用途有关。)。

可以使用“数据库向导”来创建数据库。通过该向导可以从内置模板中进行选择,然后对其进行一定程度的自定义。随后,该向导会为数据库创建一组表、查询、窗体和报表,同时还会创建切换面板。表中不含任何数据。如果内置模板中的某个模板非常符合您的要求,请使用该方法。

使用“数据库向导”创建数据库

利用“数据库向导”,用一步 *** 作即可为所选数据库类型创建必需的表、窗体和报表。这是创建数据库的最简单方法。该向导提供了有限的选项来自定义数据库。

单击工具栏上的“新建”。

在“新建文件”任务窗格中,在“模板”下,单击“本机上的模板”。

在“数据库”选项卡上,单击要创建的数据库类型的图标,然后单击“确定”。

在“文件新建数据库”对话框中,指定数据库的名称和位置,然后单击“创建”。

按照“数据库向导”的指导进行 *** 作。

如果向导未启动

这可能是因为 Access 正运行于沙盒模式,但您的计算机上尚未安装 Microsoft Jet 40 SP8 或更高版本。启用沙盒模式后,必须安装有 Jet 40 SP8 或更高版本,Access 才能完全发挥作用。

有关安装 Jet 升级的详细信息,请参阅 Office Online 文章关于 Microsoft Jet 40 SP8 或更高版本。

有关沙盒模式的详细信息,请参阅 Office Online 文章关于 Microsoft Jet Expression Service 沙盒模式。

注释 不能使用“数据库向导”向已有的数据库中添加新的表、窗体或报表。

如果正在使用 Access 2003,可以在 中搜索 Access 模板。下载模板是创建数据库的最快方式。如果您找到了非常符合要求的模板,请使用该方法。模板是一个包含表、查询、窗体和报表的 Access 数据库文件 (mdb)。表中不含任何数据。打开数据库后,可以自定义数据库和对象。

使用模板创建数据库

这是创建数据库的最快方式。如果能找到并使用与您的要求非常接近的模板,则此方法效果最佳。

在工具栏上单击“新建”。

在“新建文件”任务窗格中,在“模板”下,搜索特定的模板,或单击“Office Online 模板”找到合适的模板。

找到需要的 Access 模板,然后单击“下载”。

如果要基于自己的设计创建数据库,请先创建一个空数据库,然后再分别添加表、窗体、报表及其他对象。这是最灵活的方法,但需要分别定义每一个数据库元素。

不使用“数据库向导”创建空数据库

单击工具栏上的“新建”。

在“新建文件”任务窗格中的“新建”下,单击“空数据库”。

在“文件新建数据库”对话框中,指定数据库的名称和位置,然后单击“创建”。

然后将出现“数据库”窗口 (数据库窗口:在打开 Access 数据库或 Access 项目时出现的窗口。它显示用于新建数据库对象和打开现有对象的快捷方式。),现在便可以在数据库中创建所需的对象 (数据库对象:Access 数据库包含诸如表、查询、窗体、报表、页、宏和模块等对象;Access 项目包含诸如窗体、报表、页、宏和模块等对象。)。>>

问题五:怎样在mysql中创建数据库 是这句:创建一个数据库MYSQLDATA

mysql> CREATE DATABASE MYSQLDATA;

基本 *** 作:MySQL中新建用户,新建数据库,用户授权,删除用户,修改密码的相关 *** 作测试环境:WIN32 mysql5045注:本 *** 作是在WIN命令提示符下,phpMyAdmin同样适用。

用户:phplamp 用户数据库:phplampDB1新建用户。登录MYSQL

@>mysql -u root -p

@>密码

创建用户

mysql> insert into mysqluser(Host,User,Password) values(localhost,phplamp,password(1234));

刷新系统权限表

mysql>flush privileges;

这样就创建了一个名为:phplamp 密码为:1234 的用户。然后登录一下。mysql>exit;

@>mysql -u phplamp -p

@>输入密码

mysql>登录成功2为用户授权。登录MYSQL(有ROOT权限)。我里我以ROOT身份登录

@>mysql -u root -p

@>密码

首先为用户创建一个数据库(phplampDB)

mysql>create database phplampDB;

授权phplamp用户拥有phplamp数据库的所有权限。

>grant all privileges on phplampDB to identified by '1234';

刷新系统权限表

mysql>flush privileges;

mysql>其它 *** 作/

如果想指定部分权限给一用户,可以这样来写:

mysql>grant select,update on phplampDB to identified by '1234';

刷新系统权限表。

mysql>flush privileges;

/3删除用户。@>mysql -u root -p

@>密码

mysql>DELETE FROM user WHERE User=phplamp and Host=localhost;

mysql>flush privileges;

删除用户的数据库

mysql>drop database phplampDB;4修改指定用户密码。@>mysql -u root -p

@>密码

mysql>update mysqluser set password=password('新密码') where User=phplamp and Host=localhost;

mysql>flush privileges;5列出所有数据库mysql>show database;6切换数据库mysql>use '数据库名';7列出所有表mysql>show t>>

问题六:怎么创建数据库连接 方法一、通过编写代码来连接数据库

1定义连接字符串。Data Source=服务器;Initial Catalog=数据库名;User ID=用户名;Pwd=密码 如:Data Source=IDEA-PC\SQLEXPRESS;Initial Catalog=student;User ID=sa;

2创建Connection对象。 SqlConnection sqlconnection1=new SqlConnection(constring);

constring为连接字符串。

3打开与数据库的链接。 Sqlconnection1Open();

4这时数据库就连接成功,可以 *** 作数据库了。

方法二、通过拖拽形式建立数据库连接

1打开视图-->服务器资源管理器。

2右键点就数据连接,选择添加连接。

3选择服务器名(先刷新一下)-->登陆到服务器身份验证形式-->选择一个数据库名-->测试链接-->确定(如果测试链接成功的话)。

4这是建立数据库连接就成功了,可以使用了。

问题七:sqlserver 下怎么建立数据库 怎么建表 方法/步骤

1

首先我们打开SQL SERVER自带的数据库管理工具,从开始菜单中可以找到,如图点击进去;

2

开始连接SQL SERVER服务器,就是我们装好的SQL SERVER 服务器;

3

右击数据库,选择第一个,新建一个数据库;

4

填写数据库的名称,下面是设置自动增长的,一般不用管,默认

5

点击确定后就可以生成一个数据库,此时里面是没有表的;

6

右击表新建一个表,填写你要的字段名称

7

填完字段名称后点击字段名称那个内部窗口的小叉叉,然后就提示你输入表名了,填写下表名,一个数据库的建立过程就是这样的;

或者

create database stuDB

on primary -- 默认就属于primary文件组,可省略

(

/--数据文件的具体描述--/

name='stuDB_data', -- 主数据文件的逻辑名称

filename='D:\stuDB_datamdf', -- 主数据文件的物理名称

size=5mb, --主数据文件的初始大小

maxsize=100mb, -- 主数据文件增长的最大值

filegrowth=15%--主数据文件的增长率

)

log on

(

/--日志文件的具体描述,各参数含义同上--/

name='stuDB_log',

filename='D:\stuDB_logldf',

size=2mb,

filegrowth=1mb

)

问题八:oracle数据库怎么创建新用户? 在CRT中进入oracle --连接sqlplus

按照下面写完代码直接复制进去回车就行了

---建立用户代码为:CREATE USER 用户名字 PROFILE DEFAULT IDENTIFIED BY 密码 DEFAULT TABLESPACE 指定表空间名字 TEMPORARY TABLESPACE 临时表空间 ACCOUNT UNLOCK;

---赋权

begin

EXECUTE IMMEDIATE 'GRA�T SELECT ANY DICTIONARY TO 用户名';

EXECUTE IMMEDIATE 'GRANT ALTER ANY TABLE TO 用户名';

EXECUTE IMMEDIATE 'GRANT ALTER SYSTEM TO 用户名';

EXECUTE IMMEDIATE 'GRANT ALTER ANY PROCEDURE TO 用户名';

EXECUTE IMMEDIATE 'GRANT CONNECT TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE ANY PROCEDURE TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE ANY TABLE TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE ANY INDEX TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE DATABASE LINK TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE PUBLIC DATABASE LINK TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE ANY VIEW TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE PUBLIC SYNONYM TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE TABLE TO 用户名';

EXECUTE IMMEDIATE 'GRANT DELETE ANY TABLE TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP PUBLIC DATABASE LINK TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP ANY TRIGGER TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP ANY INDEX TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP ANY PROCEDURE TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP ANY TABLE TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP ANY VIEW TO 用户名';

>>

问题九:如何创建数据库 1、通过向导建立和使用数据库

第一步:选择服务视图,然后展开DataBase(数据库节点),右键点击JavaDB

启动服务器

2、在右键单击JavaDB,选择创建数据库

3、在d出的对话框中填写相应的名称,写完后点击确定完成的数据的创建。

为了不影响其他的数据库表,新建一张数据库表t_worker_info,

create table t_worker_info(

id int(8) primary key not null auto_increment,

w_id int(10) not null,

w_name varchar(20) not null,

w_age int(3),

w_sex varchar(10),

w_birth varchar(20)

);

创建t_worker_info后,查看一下数据结构

desc t_worker_info;

双击选中的数据库,在Views鼠标右键“Create View”,打开编辑窗口,并在窗口中输入代码

CREATE VIEW `view_worker_info` AS

SELECT FROM t_worker_info;

查看创建视图的基本信息,利用desc或describe语句,代码如下:

desc view_worker_info;

查看视图信息,如存储引擎、数据长度等,如果上述指标都为null,说明视图是虚表,代码如下:

show table status like 'view_worker_info';

查看创建视图的详细信息,需要用到show create view 视图名,

show create view view_worker_info;

以上就是关于如何在MySQL中创建视图全部的内容,包括:如何在MySQL中创建视图、sql数据库视图怎么创建、如何创建数据库——数据库的基本 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/sjk/10203213.html

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

发表评论

登录后才能评论

评论列表(0条)

保存