怎么保存视图mysql 如何保存mysql数据库

php的exec方法怎样才能备份mysql的视图--routines , -R
在转储的数据库中转储存储程序(函数和程序) 。使用---routines产生的输出包含CREATE PROCEDURE和CREATE FUNCTION语句以重新创建子程序 。但是,这些语句不包括属性,例如子程序定义者或创建和修改时间戳 。这说明当重载子程序时,对它们进行创建时定义者应设置为重载用户 , 时间戳等于重载时间 。
如果你需要创建的子程序使用原来的定义者和时间戳属性 , 不使用--routines 。相反,使用一个具有mysql数据库相应权限的MySQL账户直接转储和重载mysql.proc表的内容 。
该选项在MySQL 5.1.2中添加进来 。在此之前,存储程序不转储 。
对视图不熟 , 不知道你要的是不是这个 。
mysql中的存储过程、触发器、视图的用法建立存储过程
Create procedure、Create function
下面是它们的格式:
Create proceduresp_Name ([proc_parameter ])
routine_body
这里的参数类型可以是 IN OUT INOUTT , 意思和单词的意思是一样的,IN表示是传进来的参数,
OUT是表示传出去的参数,INOUT是表示传进来但最终传回的参数 。
Create functionsp_Name ([func_parameter ])
Returns type
Routine_body
Returns type 指定了返回的类型 , 这里给定的类型与返回值的类型要是一样的 , 否则会报错 。
下面给出两个简单的例子来说明:
1、 显示Mysql当前版本
执行结果
mysql use welefen;
Database changed
mysql delimiter //#定义//作为结束标记符号
mysql create procedure getversion(out param1 varchar(50)) #param1为传出参数
- begin
- select version() into param1;#将版本的信息赋值给 param1
- end
- //
Query OK, 0 rows affected (0.00 sec)
mysql call getversion(@a);#调用getversion()这个存储过程
- //
Query OK, 0 rows affected (0.00 sec)
mysql select @a;
- //
--------------------------
| @a|
--------------------------
| 5.1.14-beta-community-nt |
--------------------------
1 row in set (0.00 sec)
2、 显示”hello world”
执行结果
mysql delimiter //
mysql create function display(w varchar(20)) returns varchar(50)
- begin
- return concat('hello ‘,w);
- end
- //
Query OK, 0 rows affected (0.05 sec)
mysql select display("world");
- //
------------------
| display("world") |
------------------
| hello world|
------------------
1 row in set (0.02 sec)
其他操作存储过程的语句
前面我们已经知道了怎么创建存储过程,下面看看其他常用的用于操作存储过程的语句 。
Alter {procedure | function} sp_Name []
Alter 语法是用来改变一个过程或函数的特征,当你想改变存储过程或者函数的结构时可以使
用它 。当然你也可以先 drop 它再 create 。
Drop {procedure | function}[if exists] sp_Name
Drop 语法即用来删除一个存储程序或者函数,当你创建的一个存储过程或者函数的名字已经存
在时,你想把以前的给覆盖掉,那么此时你就可以使用 drop ,然后在创建 。
Show create {procedure | function } sp_Name
Show 语法用来显示创建的存储过程或者函数的信息 。这里的 show 用法跟数据表中的 show 用
法是很相似的 。
Show {procedure | function} status [like 'partten']
它返回子程序的特征 , 如数据库,名字 , 类型,创建者及创建和修改日期 。如果没有指定样式,
根据你使用的语句,所有存储程序和存储函数的信息都被列出 。
看了以上的几个语法,你是不是感觉跟对表的操作很相象 , 那你就想对了,他们确实是很相似
的 。带着一份激动心情我们继续往下看,你会发现很简单 。
Begin ... End语句
通过 begin end 可以来包含多个语句,每个语句以“;”结尾 。
Declare
用Declare 来声明局部变量
Declarevar_Name type defaulevaule
Delare 条件
【怎么保存视图mysql 如何保存mysql数据库】Declarecondition_Name CONDITION FOR condition_value
调用存储过程
Call
格式:
Callsp_Name [parameter ]
这里的sp_Name必须是由 create procedure 创建的名称 。它可以通过声明的参数来传回值 ,
它也返回受影响的行数,在MySQL中可以通过 mysql_affected_rows() 来获得 。
流程控制语句
IF语句
IFsearch_condition THENstatement_list
[ELSEIFsearch_condition THENstatement_list]
[ELSEstatement_list]
END IF
CASE语句
CASE case_value
WHEN when_value THENstatement_list
WHEN when_value THENstatement_list]
ELSEstatement_list]
END CASE
LOOP语句
[begin_label:] LOOP
statement_list
END LOOP [end_label]
LOOP 实现了一个简单的循环,通过 LEAVE 来退出
LEAVE语句
LEAVE lable
退出语句,一般可以用在循环中 。
ITERATE语句
ITERATE lable
ITERATE 一般出现在 LOOP、REPEATE、WHILE 里,意思是再次循环 。
REPEATE语句
[begin_label:] REPEAT
statement_list
UNTILsearch_condition
END REPEAT [end_label]
REPEAT 语句内的语句或语句群被重复 , 直至 search_condition为真 。
WHILE语句
[begin_label:] WHILEsearch_condition DO
statement_list
END WHILE [end_label]
WHILE 语句内的语句或语句群被重复,直至 search_condition为真 。
运用实例
下面通过几个例子来讲述他们的应用:
对网站用户的操作
为了简单,用户表只有用户名和密码的信息.在服务端,我们建立如下的表:
代码片段
Drop table if exists user;
Create table user(
Id int unsigned not null auto_increment,
Name varchar(20) not null,
Pwd char(32) not null,
Primary key(Id)
);
添加用户的存储过程:
代码片段
Delimiter //
Create procedure insertuser(in username varchar(20),in userpwd varchar(32))
Begin
Insert into welefen.user(Name,Pwd) values (username,md5(userpwd));
End
//
验证用户的存储过程:
代码片段
Delimiter //
Create procedure validateuser(in username varchar(20),out param1)
Begin
Select Pwd into param1 from welefen.user where Name=username;
End
//
修改密码的存储过程:
代码片段
Delimiter //
Create procedure modifyPwd(in username varchar(20),in userpwd varchar(32))
Begin
Update welefen.user set Pwd=md5(userpwd) where Name=username;
End
//
删除用户的存储过程:
代码片段
Delimiter //
Create procedure deleteuser(in username varchar(20))
Begin
delete from welefen.user where Name=username;
End
//
在客户端,我们给出如下的程序:
代码片段
文件名:ProcedureUser.php
?php
if (!mysql_connect("localhost","root","welefen")){
echo "连接数据库失败";
}
if (!mysql_select_db("welefen")){
echo "选择数据库表失败br";
}
$insert_user=array("welefen","welefen");//这里的welefen分别为用户名、密码
if (mysql_query("call insertuser('$insert_user[0]','$insert_user[1]')")){
echo "添加用户$insert_user[0]成功br";
}else {
echo "添加用户$insert_user[0]失败br";
}
$validate_user=array("welefen","welefen");//这里的welefen分别为用户名、密码
mysql_query("call validateuser('$validate_user[0]',@a)");
$Pwd=mysql_query("select @a");
$result=mysql_fetch_array($Pwd);
if ($result[0]==md5($validate_user[1])){
echo "用户$validate_user[0]验证正确br";
}else {
echo "用户$validate_user[0]验证错误br";
}
$modify_Pwd=array("welefen","weilefeng"); //welefen为用户名weilefeng为新密码
if (mysql_query("call modifyPwd('$modify_Pwd[0]','$modify_Pwd[1]')")){
echo "用户$modigy_Pwd[0]的密码修改成功br";
}else {
echo "用户$modigy_Pwd[0]的密码修改失败br";
}
$delete_user=array("welefen");//welefen为用户名
if (mysql_query("call deleteuser('$delete_user[0]')")){
echo "用户$delete_user[0]删除成功br";
}else {
echo "用户$delete_user[0]删除失败br";
}
?
程序运行的结果:
执行结果
添加用户welefen 成功
用户welefen 验证正确
用户welefen 的密码修改成功
用户welefen 删除成功
以上的这个程序简单的说明了Mysql 中的存储过程结合PHP 的应用 , 当然在实际应用要比这个
复杂的多 。
验证角谷猜想
角谷猜想:给定一个整数x,若x%2=1 , 则x=3*x 1,否则x=x/2,如此循环下去,经过有限步骤必
能得到1 。
例如:初始整数为9 , 则
9-28-14-7-22-11-34-17-52-26-13-40-20-10-5-16-8-4-2-1
为了说明存储过程中一些语法的应用,我们通过存储过程来实现它:
执行结果
mysql delimiter //
mysql create procedure jgguess(in number int)
- begin
- declare param1 int default 1;
- set @a=concat(number);
- jiaogu:loop#循环开始
- set param1=number%2;
- if param1=1 then set number=number*3 1; #number 为奇数,将它乘3加 1
- else set number=number/2;
- end if;
- set @a=concat(@a,'-',number);
- if number1 then iterate jiaogu; #number 不为 1,继续循环
- end if;
- leave jiaogu; #退出循环
- end loop jiaogu;
- end
- //
Query OK, 0 rows affected (0.00 sec)
mysql call jgguess(11);
- //
Query OK, 0 rows affected (0.00 sec)
mysql select @a//
-------------------------------------------------------
| @a|
-------------------------------------------------------
| 11-34-17-52-26-13-40-20-10-5-16-8-4-2-1 |
-------------------------------------------------------
1 row in set (0.02 sec)
在这个存储过程中,你传入的参数不能超过int 型数据的范围,否则就会报错 。
触发器
触发器是与表有关的命名数据库对象 , 当表上出现特定事件时,将激活该对象 。例如当我们向
某个表插入一行数据时发生一个事件或者删除某个记录时触发某个事件 。
语法:
CREATE TRIGGERtrigger_Name trigger_time trigger_event
ONtbl_Name FOR EACHROWtrigger_stmt
trigger_time 是触发器的动作时间 。它可以是 BEFORE 或 AFTER , 以指明触发器是在激活它的
语句之前或之后触发 。
trigger_event 指明了激活触发器的语句的类型 。trigger_event可以是下述值之一:
INSERT:将新行插入表时激活触发器,例如,通过 INSERT、LOADDATA 和 REPLACE 语句;
UPDATE:更改某一行时激活触发器,例如,通过UPDATE语句;
DELETE:从表中删除某一行时激活触发器 , 例如,通过 DELETE 和 REPLACE 语句 。
例如当我们向上面的user 表中增加一个用户名为“welefen ”时,我们把记录用户数的表的值增
加 1;
代码片段
Create table numuser(
Num int not null default 0
);
Delimiter //
Create trigger testnum after insert on welefen.userfor each row
Begin
Update welefen.numuser set Num=Num 1;
End
//
视图
当我们想得到数据表中某些字段的信息,并想把他们保存时我们就可以用视图 。
语法:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_Name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
例如我们想对上面的用户表使用视图,可以这样:
Create viewwelefen.userview as select * fromwelefen.user;
查看视图的信息可以使用:
Select * fromwelfen.userview;
MySql的视图存储问题不知道这样对不对.
视图作为永久配置需要有表结构存储,这样重新启动后才能继续存在.
因为是虚表,所以不存在数据文件.
MYSQL数据太大时怎么优化 视图?存储过程? - 技术问答对于百万级的数据库单独表,一般是分表、在搜索字段上加字段、读写分离吧 , 其他的请高手补充
mysql: 创建视图和存储过程1.drop procedure if exists pr_even;create procedure pr_even(in x int,out y int)begindeclare i int;set y = 0; set i = 0; while ix1 doif i mod 2 = 0 thenset y = y1;end if;set i = i1;end while;end;-- 调用过程CALL pr_even(2012, @y);SELECT @y; 2.-- 创建临时表length()creat table tmp_student {select name from student where length(name)3}-- 创建视图create view v_student as { select name,age from student as s,tmp_student as t_s where s.name=t_s.name}
MySQL视图使用示例
使用示例
使用示例
检查选项的使用
mysql是可以基于视图创建视图,它会检查视图所依赖的视图的规则
如果再基于v2创建视图v3 , v3没有定义检查选项,则此时向v3中插入数据时,不会检查是否满足v3的条件 , 但是会检查是否满足v2和v1的条件
local选项相比于cascaded,不会自动向上添加选项
如创建一个视图 , 此时视图中只包含一条数据
例如,现要查询每个学生选修的课程(多对多,三张表),将SQL保存到视图 , 以后再想查询,直接select * from 视图即可
怎么保存视图mysql的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于如何保存mysql数据库、怎么保存视图mysql的信息别忘了在本站进行查找喔 。

    推荐阅读