1.存储过程
存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理。
创建存储过程:
create
[definer = {user | current_user}]
procedure sp_name ([proc_parameter[,…]])
[characteristic…] routine_body
proc_parameter
[in | out | inout] param_name type
参数:
in,表示该参数的值必须在调用存储过程时指定
out,表示该参数的值可以被存储过程改变,并且可以返回
inout,表示该参数的调用时指定,并且可以被改变和返回
调用存储过程:
call sp_name([parameter[,…]])
call sp_name[()]
创建不带参数的存储过程:
create procedure sp1() select version();
call sp1;
call sp1();
创建带有IN类型参数的存储过程:
delimiter //
create procedure removeTestById(in p_id int unsigned)
begin
delete from test where id=p_id;
end
//
call removeTestById(2)//
创建带有in和out类型参数的存储过程:
create procedure removeTestAndReturnTestNums(in p_id int unsigned,out testNums int unsigned)
begin
delete from test where id=p_id;
select count(id) from test into testNums;
end
//
call removeTestAndReturnTestNums(3,@nums);
select @nums;
创建多个out类型参数的存储过程:
create procedure removeTestByIdAndReturnInfos(in p_id smallint unsigned,out deleteTest smallint unsigned,out testCounts smallint unsigned)
begin
delete from test where id=p_id;
select row_count() into deleteTest;
select count(id) from test into testCounts;
end
//
call removeTestByIdAndReturnInfos(5,@a,@b);
select @a;
select @b;
存储过程与自定义函数的区别:
存储过程可以返回多个值;函数只能有一个返回值
存储过程一般独立的来执行;而函数可以做为其它SQL语句的组成部分来实现
2.存储引擎
MySQL可以将数据以不同的数据存储在文件(内存)中,这种技术就称为存储引擎。
MySQL的存储引擎有:MyISAM、InnoDB、Memory、CSV、Archive
并发控制:
当多个连接对记录进行修改时保证数据的一致性和完整性
锁:
共享锁(读锁),在同一时间段内,多个用户可以读取同一资源,读取过程中数据不会发生任何改变。
排他锁(写锁),在任何时候只有一个用户写入资源,当进行写锁时会阻塞其它的读锁或者写锁操作。
锁颗粒:
表锁,是一种开销最小的锁策略
行锁,是一种开销最大的锁策略
事务:
事务用于保证数据库的完整性
事务的特性:
原子性、一致性、隔离性、持久性
索引:
对数据表中的一列或多列的值进行排序的一种结构