一、MySQL索引有哪两种存储类型?其巾系统默认索引存储类型是什么?
索引的两种存储类型:B型树索引和哈希索引。其中B型树索引是系统默认的存储类型。支持B型树索引的是InnoDB和MyISAM。支持哈希索引的是MEMORY。
二、存储过程的优点
1.存储过程增强了SQL语言的功能和灵活性
2.存储过程允许标准组件式编程,可以一次编译多次运行。
3.存储过程能实现较快的执行速度
4.存储过程能够减少网络流量。
5.存储过程可被作为一种安全机制来充分利用。
三. 创建存储过程
1.创建语句
创建存储过程的基本形式如下:
CREATE PROCEDURE 存储过程名 ([parameter[,...]]) [characteristic...]
BEGIN
过程体;
END;
例1:能够通过学号获得学生的姓名,第一种方式(用户变量在调用的时候定义)
(1)创建存储过程:
-- 创建存储过程(查)
DELIMITER //
CREATE PROCEDURE p_stu(IN xh CHAR(15),OUT xm CHAR(10))
BEGIN
SELECT sname INTO xm FROM student WHERE sno=xh;
END;
-- 执行存储过程
SET @name=NULL;
CALL p_stu('0601020212',@name)
-- 查询变量,获得值
SELECT @name;
例2:创建存储过程,可以实现对sdept表数据的录入
-- 创建存储过程(增)
DROP PROCEDURE IF EXISTS p_insdept
DELIMITER //
CREATE PROCEDURE p_insdept(in_dno CHAR(2),in_name VARCHAR(30),in_addr VARCHAR(50),in_tele CHAR(15))
BEGIN
INSERT INTO sdept VALUES(in_dno,in_name,in_addr,in_tele);
END;
-- 插入数据
CALL p_insdept('12','电子信息学院','沿滨路6号','84233312');
例3:使用存储过程录入数据时,违反主键、唯一约束,需要给出提示,代码正常结束。
-
-- 创建存储过程(异常处理:违反主键唯一约束)
DROP PROCEDURE IF EXISTS p_insdept
DELIMITER //
CREATE PROCEDURE p_insdept(in_dno CHAR(2),in_name VARCHAR(30),in_addr VARCHAR(50),in_tele CHAR(15))
BEGIN
DECLARE EXIT HANDLER FOR 1062 SET @status='违反约束';
INSERT INTO sdept VALUES(in_dno,in_name,in_addr,in_tele);
END;
-- 调用存储过程
CALL p_insdept('05','外语学院','南京路10号','888881230');
-- 查看异常值
SELECT @status;
2.-- 创建存储过程(异常处理:违反外键约束)
DROP PROCEDURE IF EXISTS p_delsdept;
DELIMITER //
CREATE PROCEDURE p_delsdept(in_name VARCHAR(30))
BEGIN
-- declare continue handler for sqlstate'23000' set @sta='违反外键约束';
DECLARE CONTINUE HANDLER FOR 1451 SET @sta='违反外键约束';
DELETE FROM sdept WHERE dname=in_name;
END;
-- 调用存储过程
CALL p_delsdept('计算机学院');
-- 查看存储过程的异常值
SELECT @sta;
例4:创建存储过程,可以实现根据学院的名称对sdept表数据的删除操作
-- 创建存储过程(删)
DELIMITER //
CREATE PROCEDURE p_delsdept(in_name VARCHAR(30))
BEGIN
DELETE FROM sdept WHERE dname=in_name;
END;
CALL p_delsdept('电子信息学院');
例5:使用存储过程删除sdept表中数据,输入参数为院系名称,当该院系被其他表引用,则提示出现外键约束,代码正常结束
- 判断错误码
错误码: 1451,触发外键关联
delete from sdept where dname='计算机学院’;
- 创建存储过程
drop procedure if exists p_delsdept;
create procedure p_delsdept(in_name varchar(30));
BEGIN
-- declare continue handler for SQLSTATE23000 set @sta=’违反外键约束’;
declare continue handler for 1451 set @sta='违反外键约束’;
delete from sdept where dname=in_name;
end;
- 调用存储过程
call p_delsdept(‘计算机学院’);
- 查看存储过程中的异常值:select @sta;