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 float
return 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;
end
delimiter ;
调用方式:
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;