免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2514 | 回复: 0
打印 上一主题 下一主题

mysql基础2.插入-删除-修改-存储过程-游标 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-04 13:05 |只看该作者 |倒序浏览
php访问mysql
get_magic_quotes_gpc()函数,转义符号是否自动开启
addslashes()过滤输入数据
stripslashes()过滤输出数据
@ $db = new mysqli('localhost', 'bookorama', '123', 'books');
mysqli_connect_erroron() 连接数据库错误
$query= "select * from books where ".$searchtype." like '%".searchterm."';
$result = $db->query($query); /*$db是一个对象,函数query()是对象的一个属性。
                                $result是新构件的一个对象。
                               */
$num_results = $result->num_rows;  /*$num_results是一变量,num_rows()是一属性,                                  查询返回的行数。*/
$row = $result->fetch_assoc(); /*该函数接受结果集合中的每一行,并以一个相关数组                                    返回该行,每个关键词为一个属性名,每个值为数                                     组中响应的值*/
$row = $result->fetch_row();      /*返回一个列举数组,属性值在每个数组值$row[0],                                     $row[1]等等的里面列出。*/
$row = $result->fetch_object();  /*将一行取回到一个对象中,通过$row->title
                                    $row->isbn等访问每个属性*/
prepared语句
$query= "insert into books values(?,?,?,?);
$stmt = $db->prepare($query); //告诉哪些变量应该被替换.
$stmt->bind_param("sssd", $isbn, $author, $title, $price);
/*改变这四个帮顶变量的值,并且在不用准备的情况下重新执行这个语句,这个功能对于循环批量插入操作来说是非常重要的*/
$stmt->execute();          //运行插入
echo $stmt->affected_rows.'本书插入数据库.';
$stmt->close();
$stmt->bind_result($isbn, $author, $title, $price);//将变量绑定到将通过查询返回的列
$stmt->execute();
可以在循环中调用:
$stmt->fetch();
每当该语句被调用时,他将获得下一个结果行,并填充到4个绑定变量中。
权限系统
user表:全局
更新权限命令:flush priviledges;
              mysqladmin flush-priviledges
              mysql reload
show 命令
show tables from books;
show columns from orders from books;
show columns from books.orders
show grants for bookorama
表的优化
optimize table table_name;
myisamchk -r table
备份
mysqldump --opt --all-databases >all.sql
mysqlbotcopy database /path/for/backup

存储引擎
有时成为表格类型
主要两种myisam(有索引顺序访问方法)不支持事务安全和外键,当对一个表格使用大量的        select , insert或二者集合的时候,需要全文搜索功能的时候应该使用myisam类型。
     innodb支持事务安全和外键,事务非常重要,如财务数据表格,或者在insert和           select语句交错执行的情况下应用innodb
事务:默认情况下mysql自动提交命令。
     使用事务安全表格关闭自动提交命令
       set autocommit = 0 ;
       start transaction; //打开自动提交
      完成事务后提交命令:commit;
如果改变主义,可以使用rollback;回到数据库以前的状态
只有提交了一个事务,事务才能被会话中的其他用户所见。
alter table orders type = innodb;
alter table order_items type =innodb;
insert into orders values (6, 2, 66.00, '2004-02-02');
insert into order_items values(6,'0-666-66666-4',1);
插入后退出,重新登陆,查询不到数据,因为没提交。
外键
creat table order_items
( orderid int unsigned not null references orders(orderid),
isbn.....
....);
alter table order_items type=innodb;
alter table order_items
add foreign key (orderid) references orderis(orderid);
在插入数据的时候如果orderid数据与orders表中orderid的数据不一致,插入失败。
存储过程
存储过程是一个可编程的函数,在mysql中创建并保存,他可以有sql语句和一些特殊的控制结构组成,当希望在不同的应用程序或平台上执行相同的喊住,后者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看作是对编程中的面向对象方法的模拟,他们允许控制数据的访问方式
#basic stored procedure example
delimiter //   # 分隔符设置为//
create procedure total_orders(out total float)#创建存储过程,total是参数,需要计                                              #算的值,float为参数类型,inout表示传入但可
                                        #被存储过程更改,out表示参数将被传出或返                                             #回,in表示传入。                                          
begin               #过程体必须在begin和end之间,类似{}                    
select sum(amount) into total from orders;
end
//
delimiter ;
然后可以用 call total_orders(@t); #调用过程。
select @t
存储函数
delimiter //
create fuction add_tax(price float) returns float
return price*1.1 ;
//
delimiter ;
不用使用in或者out,所有 参数都是in,returns是返回类型,return返回一个值。
select_tax(100);
110
查看定义过程和函数的代码
show create procedure total_orders;
show create function addtax;
drop procedure total_orders;
drop function addtax;
局部变量
可以在begin ..end语句块中声明局部变量
delimiter //
create function add_tax(price float) returns float
begin
declare tax float default 0.10;
return price*(1+tax);
end
//
delimiter ;
游标和控制结构
delimiter //
create procedure largest_order(out lagest_id int)  #参数
begin
declare this_id int;  #声明局部变量
declare this_amount float;
declare l_id int;
declare l_amount float default 0;
declare done int default 0; #变量done为循环标记,当遍历所有行后值为1,退出循环
declare continue handler for sqlstate '02000' set done =1;
#声明一个句柄,chontinue句柄执行了指定动作,并且继续存储过程的执行,exit句柄从最近的
#begin...end代码块中推出。声明句柄的下一个部分指定了句柄被调用的时间,该句柄在#sqlstate '02000'语句被执行时调用。即该句柄在无法再找到记录行后被调用。我们将逐行处#理一个结果集,而且当遍历了所有需要处理的记录时,这个句柄将被调用,也可以一指定等价#的for not found语句。其他选项还包括sqlwarning sqlexception。
declare c1 cursor for select orderid, amount form orders;
#游标类似与一个数组,它将从一个查询获得结果集,如myssqli_fetch_query()所返回的,并且允许一次只处理一行,如fetch_row()函数。
open c1;#执行查询
repeat
fetch c1 into this_id, this_amount;#从游标查询中获得一行数据。
if not done then
if this_amount > l_amount then
   set l_amount =this_amount;
   set l_id = this_id;
end if;
end if;
until done end repeat;
close c1;
set largest_id = l_id;
end
//
delimiter ;
存储过程还支持while循环
while condition do
....
end while
loop
....
end loop
这些循环么有内置语句,可以通过leave语句退出循环。
存储过程不支持for循环
if condition then
....
[else if condition then]
...
[else]
...
end if
case value
  when value then statement
  [when value then statement]
  [else statement]
end case
call largest_order(@l);#调用存储过程。
select @l;



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/13535/showart_71690.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP