索引
什么是索引?
类似于书的目录,需要几页纸来存放目录,但通过目录可快速定位到章、节部分。
索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。
主键索引
主键也是一个特殊索引
primary key
查看索引
show index from class;
创建索引
create index classindex on class(stuid);
alter table course add index index_name(name);
删除索引
drop index classindex on class;
自定义函数
创建自定义函数
#y=2*x + 1
delimiter // #delimiter代表改变SQL语句结束符号
create function LinearFunction(x int)
returns int
begin
declare y int;
set y=2*x+1;
return y;
end //
delimiter ;
select LinearFunction(5);
删除自定义函数
drop function LinearFunction;
存储过程
就是为了以后的使用而保存的一条或多条MySQL语句的集合,可以将其视为批处理文件,虽然它们的作用不仅限于批处理。
创建存储过程
select * from stuscore where Math>90;
delimiter //
create procedure info(score int)
begin select * from stuscore where Math>score;
end //
delimiter ;
call info(80);
删除存储过程
drop procedure info;
事务
用来维护数据库的完整性
保证成批的sql操作要么完全执行,要么完全不执行
比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务。
一些术语
事务(transaction)
一组sql语句
回退(rollback)
撤销指定sql语句的过程
提交(commit)
将为存储的sql语句结果写入数据表
保留点(savepoint)
事务处理中设置的临时占位符,可以对它发布回退
使用事务
开启事务
create table blank_account(
id int unsigned auto_increment primary key,
account_name varchar(10),
account_blance decimal(10,2)
);
insert into blank_account(account_name, account_blance) values('客户A','500'),('客户B','300');
select * from blank_account;
创建事务
begin;
update blank_account set account_blance=400 where id=1;
update blank_account set account_blance=400 where id=2;
#如果以上任意一条语句发生异常,则运行rollback
rollback;
commit;
select * from blank_account;
游标
一个存储在MySQL服务器上的数据库查询,被select语句检索出来的结果集,在存储了游标之后,可以根据需要滚动或浏览其中的数据
主要用于交互式应用,用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改
只能用于存储过程
常用操作
以MySQL基础二中的stuscore表为例子
select * from stuscore;
delimiter //
create procedure stuscore_cursor()
begin
declare var_id int(10);
declare var_stuname varchar(20);
declare var_Math decimal(5,1);
declare var_English decimal(5,1);
#创建游标
declare score_cursor cursor for
select stuId,stuName,Math,English from stuscore where class='1';
#打开游标
open score_cursor;
#使用游标
fetch score_cursor into var_id,var_stuname,var_Math,var_English;
select var_id,var_stuname,var_Math,var_English;
#关闭游标
close score_cursor;
end //
delimiter ;
call stuscore_cursor();