`
webcode
  • 浏览: 5953668 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

程序员必会sql28技[百度资深架构师王历继含泪推荐]

 
阅读更多
1.创建视图:1.1基本操作
create view v_caseinfo as select * from caseinfo;
drop view v_caseinfo;
alter view V_caseinfo as select po,id,number from caseinfo;

注意在查看所有的视图时,并不能使用:show views;(如同show tables;)此处请注意。

您在使用show tables;时便可看到视图。(方法一)

(方法二)

1) mysql> show table status where comment='view'; 
(说明:Mysql5.1支持视图,视图被看作一种抽象表,因此显示视图状态的语句与显示表状态的语句相同,只是在comment列中以‘view’区分)

2) mysql> select * from information_schema.tables where table_schema='yourDatabaseName' and table_type='view';
(说明:这种方法通过系统表查找,效果同上,显示信息更详细。如果不能正确显示结果,可能是大小写的问题,Mysql在不同系统平台不同配置参数下的显示结果可能不同,注意这点。)


若要看某个详细的视图,使用:


show create view V_caseinfo;



2.存储过程
2.1基本说明
delimiter //
 create procedure proName (in parameter integer)
 begin
 declare variable varchar (20);
 if parameter=1 then
 set variable='Mysel';
 else
 set variable='php';
 end if;
 insert into caseinfo (number) values (variable);
 end;
 //


调用如下:
call proName ('123')//
运行后,将插入number字段里一个php
2.2实例,用户名登录
2.2.1in后面是要传入的参数;
2.2.2区块定义
begin
end
2.2.3
条件语句
statement
else
statement
end if;
2.2.3
while循环与loop循环
while expression do
statements
end while
loop
statements

end loop

实例:实现登录

create procedure proLogin (in un varchar (20),in pwd varchar (20))
begin
select * from setting_user where number=un and password=pwd;
end;
//
调用如下:
call proLogin ('1101','12');
将查询出一条记录
备份mysql中指定的数据用此命令
mysqldump -uroot -proot db_ddd >c:/data.sql
此法不能备份带有存储过程的。若要一同备份,加上 "-R"
mysqldump -uroot -proot -R db-ddd >c:/data.sql
2.3实例,实现用户注册
create procedure proReg (in un varchar (10),in pwd varchar (20),in page varchar (10))
begin
insert into setting_user (number,password,page) values (un,pwd,page);
end;
调用如下:
call proReg ('123','123123','wh');
2.4查找存储过和
show procedure status//
2.5修改、删除破除过程
drop procedure proReg//


3.触发器
3.1基本语法
create trigger
{before|after}用于指定的insert,update,delete 语句执行前还是后
on表名
for each row:触发器的执行间隔;一次执行一行,而不是对整个表执行一次。
实例如下:
功能:无论用户向表中添加什么数据,字段email都是'111@11.com'
create trigger triInert
before insert on setting_user
for each row


set new.email='111@11.com'


//加上begin end 报错
//注意new的使用
调用如下:
insert into -----
3.2查看
show triggers
4事务
4.1在银行处理转钱时,若A帐户中的钱刚刚被出来,B帐户没来得接受,停电了,若使用了事务,程序回滚,不做任何处理。
基本语法:autocommit是否自动提交;
rollback():回
commite():提交所有的查询
实现如下:

功能:实现关联表间的信息删除

来自php开发手册p167
1.存储过程
1.1创建与调用

delimiter //
create procedure mytest1()
select * from caseinfo;
//
call mytest1()//
1.2带参数
create procedure mytest2(in parm1 int)
select * from caseinfo where id = parm1
//
call mytest1(172)//
1.3带参数out
create procedure mytest3(out parm1 int)
set parm1 = 173;
//
call mytest3(@parm1);//
select @parm1;//注意一定是带@


1.3.1
实例二
create procedure mytest4(out parm1 int)
select id,number from caseinfo where id = 175;
//
call mytest4(@parm1);//
select @ parm1;//从caseinfo 中读入一条数据,又放置到一个变量中


1.4输入输出参数
create procedure mytest5(inout parm1 int)
select id,number into parm1 from caseinfo where id = parm1;
//
set @parm1 = 178;
select @parm1;//


1.5复合语句
create procedure mytest6(in parm1 int)
begin
select id,number from caseinfo where id= parm1;
select id from inventory where number= parmq;
end;//
call mytest(178);


1.6变量
create procedure mytest7(in a int,in b int)
begin
declare s int default 0;
set s=a+b;
select s;
end//
call mytest(7,12);//


1.7条件语句c
if then else
create procedure mytest9(in score int)
begin
if score>60 then
select "及格";
else
select "不及格";
end if;
end//


与vb的相同与php相差极大
call mytest9(33)//
case
create procedure mytest10(in level int)
begin
case level
when 1 then select "class 1";
when 2 then select "class 2";
else select "class 5";
end case;
end//
call mytest10(5);//


1.8循环语句
create procedure mytest11()
begin
declare i int default 0;
declare s int default 0;
while i<5 do
set s=s+i;
set i=i+1;
end while;
select s;
end//
call mytest11();//
repeat
create procedure mytest12()
begin
declare i int default 0;
declare s int default 0;
repeat
set s=s+i;
set i=i+1;
until i>=5
end repeat;
select s;
end//
call mytest12();//
loop
create procedure mytest13()
begin
declare i int default 0;
declare s int default 0;
loop_label:loop
set s=s+i;
set i=i+1;
if i>=5 then
leave loop_label;
end if;
end loop;
select s;
end//
call mytest13();//


1.9.游标
在存储过程中,对数据表中的每一条数据进行操作,这时要使用游标来进行处理,游标是一个可以用于循环读取数据表的对像,每次读取数据表中的一行,
1.10删除存储过程
drop procedure mytest4();//
2.解发器
create trigger test1
before insert on caseinfo
for each row
begin
case new.number
when 12 then set new.op=123;
when 15 then set new.op=456;
else set new.op=0;
end case;
end//
insert into caseinfo (number) values ('15');


每插入一条后,更新一个op
2.2删除
drop trigger test1;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics