视图
理解视图的最好方法是看一个例子:
Select cust-name,cust-concatt
From customers,orders,orderitems;
Where customers.cust_id=order.cust-id
And orderitems.order_num=order.order_num
And prod_id=;’TN2’;
S
性能问题: 因为视图不包含的数据,所以每次使用都必须处理查询的是所需的
人一个检测,如果创建和复杂的视图或者千头啊了视图,可能是下降的
很厉害,
22.1.2 视图的规86则和限制
下面是关于视图和是有那个的一些最常见的规则和限制:‘
与表一样,视图必须唯一命名。
对于可以常见的视图 没有限制。
为了常见视图,必须具有足够的访问权限,这些访问权限是数据库管理人员受孕的。
视图可以嵌套,可以利用从其他的视图中检索数据来构造一个视图。
22.2 使用的视图
在理解的什么是视图的(以及管理她们的规则和月苏之后)。
视图用create view 语句来创建。
使用show create view viewnamel来查看
22.2.1 利用的视图简化复杂的连接
视图的最常见爱你的应用能够只是是隐藏的复杂的SQL :
Create view productcustomerass AS
Select ust_name,cust_contact,prod_id
From customers,orders,ordersitems
Where customerscust_id=order.cust_id
And orderitems.order_num=orders.order_num;
为检索订购了铲平的tnst 的客户,可如下进行:
Select cust_name,cust_contact
From productcusomters
Where prod_id=’TNT2’
这条语句通过wher子句从视图中检索特定的数据,
看以看出,,视图极大的简化了复杂的sql 语句的使用。利用
以习编写基础的sql ,然后根据需要多次使用。
22.2.2 用视图重新格式化检索出的数据
Select contact(RTtim(vend_name))
As vend_titile
Order by vend_name;
22.2.3 勇士图过滤想要的数据
视图对于应用铍铜的where 子句也很有用。例如
Customermaillist视图,他过滤没有电子邮件的客户。
22.2.4 使用视图的与计算字段
视图对于简化计算的使用特备有用,下面是是第10章select 语句。
他检索的某个特定的订单中的物品。计算每种无。
Select prod_id
Quantity,
Item_price,
Quantity*item+price as expand_price
rantFromr orderitems;
Select *
From orderitemsexpand
Where order_num=20005
22.2.5 更新视图
通常是可以更新的,对他们可以进行insert,update,delete .更新 一个视图,活更新基表结构,
如果你对视图增加或删除行,际是对基本表增加。
但是,并非所有的视图都是更新的。基本上说如果能正确的确定的被更新的数据,则不循序更新,如果视图定义有如下操作:则不能进行视图操作:
分组: 使用group by 和having
连接:
子查询:
并:
聚集函数:
使用存储过程:
本章介绍什么是存储过程,为什么要使用存储过程,以及如何和使用
存储过程,并且介绍和创建和使用存储过程的基本的语法。
、
23.1 存储过程:
可以创建存储过程,存储过程简单来说,就是为以后活一条活多条。
提高性能:。因为使用存储过程比单独使用SQL语法。
存在一些只能单个请求中的Mysql 元素 和特性,以及可以使用他们呢来比那些功能更强更灵活的代码。
换句话说,使用存储过程有3个主要的好处,几位简单的。
一般来说,存储过程的编写比基本的sql 语句的复杂,需要更高的技能,更丰富的性能。
你可能没有创建存储过程的安全访问权限。许多数据存储过程的创建权限,允许用户是哟个存储过程,但不允许创建的存储过程。
尽管有这些缺陷,存储过程是非常有用的,并且应该尽可能的使用。
23.3 使用的存储过程
使用存储过程需要知道如何执行的她们,存储过程的执行比起定义的给你个经常用到,
因此,我们将从执行存储过程开始介绍,然后介绍介绍和使储存过程。
23.3.1 执行存储过程
Mysql 成为存储过程的执行为调用,因此mysql执行存储过程的call.call 接受存储过程的名字以及需要传递给他的参数。
Call productpriceing(
@pricelow,
@pricehgh,
@priceaverge
)
23.3.2 创建存储过程
正如所述,编写存储过程,并不是微不足道的事情,为让你了解一个过程,请看一个例子。一个返回产品的平均价格 的存储过程。一下代码:
Create procedure productprince(){
Begin
Select avg(prod_price) as priceaverge
From products;
End;
}
Call productpriceing();
执行创建的存储过程并现实返回的结果。因为存储过程是一个函数。所以存储过程需要是有()符号。
23.3.3 删除存储过程
存储过程在创建之后,被保存在服务器上,直至被删除命令。
为删除刚创建的存储过程,请主义。
23.3.4 使用参数
Producting 只是一个简单的存储过程,他简单的现实
23.3.4 变量variable 是内存中一个特定的位置,用来存储
以下是productpriceing的修改版本。
Create produce productpriceing(
Out p1 decimal(8,2),
Out ph decimal(8,2),
Out pa decimal(8,2)
)
Begin
Select min(prod_price)
Into pl
From products;
Select max(prod_price)
From ph;
Select avg(prod_price)
Into pa
From products;
End;
此存储过程接受3个参数:pl存储产品的最低的价格。
Call ordertotal(20005,@total)
必须给ordertotal传递2个参数;
第1个参数为订单的,第二个参数为计算出来的合计的变来闹革命
为了显示次合计,可如下进行:
Select @total;
23.3.5 建立智能存储过程
Creat table mytable(
Columsn1 int,
Columns2 varchar(10),
)defaulaut character set Hebrew
Collate Hebrew-gengral;
这个例子中制定了chararct set 和collate 两者,一般,mysql 是如下去诶的那个使用什么样的字符串和较多。
如果 制定charactoerset set 和 collate两者。则使用这些数值。
如果至指定character set,则使用次字符数据以及默认的校对。
如果既不制定character set,也不制定collate,则使用数据库默认。
除了能制定自放缓合计和校对的表范围内,mysql还语序对每个列设置
如下所示:
Create table mytable
(
Columns1 int,
Colums2 varcahr(10),
Columns3 varcahr(10) character set latin collate
)
Create table mytable
(
Columsn int,
Columns2 varcahr(20);,
Columns2 varchar(30);
)default character set Hebrew
Collate herrew_general_ci
这里对整个表以及一个特定的列指定了chararacter set.
临时区分大小下
上面的select 语句演示了通常不区分大小写的表上进行大小写搜索的一种技术。
Select 的其他collate子句还可以用于group by.having,聚集函数,别名
等。
使用28章:
数据库服务器通常包含关键的数据,确保这些数据的安全和完整性。
28.11 访问空值
Mysql 服务器的安全基础是:
多数的用户只需要对表的进行读和写
你可能向允许的添加数据,但是不允许他们删除数据
28.2 管理用户
Mysql 用户的账户和信息村砸户在名为imysql的数据库中。一个不需要
Mysql直接访问数据库和表结构,但有时需要直接访问,
Use mysql;
Select user from user;
28.2.1 创建用户账户
制定散列口令,identuifiend by 制定的口令是准文本的文件。Mysql 经在保存在user表中对其进行加密,为了作为散列数值的口令,使用identibut by passwd
.新
为重新命名一个用户账户,使用rename user语句,如下所示:
Rename user ben to xx;
28.2.3 设置访问权限
在创建用户登录后,必须接着分配访问权限。
Show grants for bforatal
Create view
Delete
Drop
Execute
File
Grant option.index,insert lock tablesl processs
Reload,replication client
Replication salceve
使用grant,revoee ,在解饿。
简化多次授权
可通过各自权限并用逗号分割,将多余的grant 语句穿在一起。如下所示:
Grant select,insert, on crashource.* to bforta;
28.2.4 更改口令
Set password for bforta=pass word();
Set password 还可以用来设置你自己的口令。
Set password=password();
28.3 小结
本章学习了通过赋予用户特殊权限的访问空值的保护msql 服务器。