MySQL学习笔记六

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

MySQL学习笔记六_第1张图片


并发控制:

当多个连接对记录进行修改时保证数据的一致性和完整性

锁:

共享锁(读锁),在同一时间段内,多个用户可以读取同一资源,读取过程中数据不会发生任何改变。

排他锁(写锁),在任何时候只有一个用户写入资源,当进行写锁时会阻塞其它的读锁或者写锁操作。

锁颗粒:

表锁,是一种开销最小的锁策略

行锁,是一种开销最大的锁策略


事务:

事务用于保证数据库的完整性

事务的特性:

原子性、一致性、隔离性、持久性


索引:

对数据表中的一列或多列的值进行排序的一种结构


你可能感兴趣的:(MySQL)