PHP和MySQL Web开发读书笔记---MySQL高级编程

来源:互联网 发布:apache 配置多个域名 编辑:程序博客网 时间:2024/04/29 16:52

1.使用LOAD DATA INFILE语句载入一个文件,如 load data infile "books.txt" into table books;

该命令把books.txt文件将原始数据读入到books表中,在默认情况下,文件中的数据必须通过Tab键隔开,每一行必须有换行符(\n)进行换行,特殊字符需转义,且每个数据需用单引号包括,要使用该语句,必须具有file权限。

2.常见的存储引擎

  MyISAM--默认引擎,可以被压缩,且可以全文搜索,他们不是事务安全的,而且也不支持外键

  InnoDB--事务安全,且提供了commit和rollback功能,还支持事务安全,且支持外键,但比前者慢

当对一个表格使用大量的select和insert语句时,应该使用MyISAM是最快的,如果需要全文搜索,也用这个;

3.在默认情况下,mysql是自动提交的

  如果我们使用事务安全的表格类型,如InnoDB,要在当前的会话中关闭自动提交,输入该命令即可:set autocommit=0;

  如果自动提交被打开了,则用如下语句开始一个事务:start transaction;,如果关闭了,就不需要使用该命令

  在完成了组成事务的语句后,使用commit将其提交给数据库

  如果改变主意,可以使用rollback将其回滚

4.更改表的类型

  alter table table_name type=innodb

5.存储过程,这边就分析3个例子吧!

第一个:
delimiter //create procedure total_orders(out total float)BEGIN select sum(amount) into total from orders;END//delimiter ;

调用方法:
call tatal_orders(@t)
使用select @t可以查看结构是否正确

 delimiter//语句表示将分隔符从当前值该为//,以保证存储过程中其他符号会被当作代码,而不是分隔符

 create procedure total_orders(out total float)创建了实际的存储过程,名为total_orders,他只有total一个参数,后面的float表明该参数是浮点型的,其中参数可以用IN、OUT、INOUT描述,IN表示该值必须传入到存储过程中,OUT表示该值会被传出或者返回,INOUT表示该值可以传入且可以被存储过程修改,感觉就像是引用的意思吧

 过程体必须封闭在BEGIN和END中,该过程体与常规的select语句相比使用了into total子句,改子句把结果传入到total这个参数中

 最后一个delimiter ;表示把分隔符改回分号

第二个
delimiter //create function add_tax(price float) return floatreturn price*1.1;//delimiter ;调用方法;select add_tax(100)

 该存储结构创建了一个函数,create function add_tax(price float) return float 这句声明了一个函数,并且表示返回一个浮点数

 

第三个
delimiter //create procedure largest_order(out largest_id int)begin declare this_id int; declare this_amount float; declare l_amount float default 0.0; declare done int default 0; declare continue handler for sqlstate '02000' set done=1; declare c1 cursor for select orderid,amount from orders; 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;enddelimiter ;调用方式:call largest_order(@l)select @l

最开始的4句是定义局部变量,使用了declare语句,其中l_amount的初始值为0.0

declare done int default 0;该句声明了done变量用来控制循环语句,当查看完所有的行后设置为1

declare continue handler for sqlstate '02000' set done=1;该句声明了continue这个句柄,他将在sqlstate '02000'语句被调用是执行,该语句以为这,该句柄将在无法找到记录后调用

接下来是声明游标c1,declare c1 cursor for select orderid,amount from orders;这只是把结果集保存在c1中,该查询还不会被执行

接下来的open c1;才是真正运行这个操作,fetch语句可以每次从结果集中返回一行,可以在repeat循环中完成此操作

通过该循环把最大值保存在l_id中,最后set largest_id=l_id

6.在定义了过程和函数后,可以用如下语句来查看定义他的代码

  show create procedure procedure_name;

  show create function function_name;

可以用如下语句来删除存储过程

  drop procedure procedure_name;

  drop function function_name;

原创粉丝点击