看最新新闻娱乐资讯,尽在猎奇娱乐头条! — 猎奇娱乐头条

首页 > 生活奇闻 > 正文
页面二维码

扫一扫

分享文章到微信

页面二维码

扫一扫

关注新闻阁公众号

分享到:

SQL基础-存储过程&触发器

2024-04-24 02:50:50 来源:本站 编辑:

导读 : 一、存储过程1、存储过程简介存储过程:
一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,然后通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用

SQL基础-存储过程&触发器

一、存储过程

1、存储过程简介

存储过程: 一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,然后通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 存储过程的创建: 使用关键字CREATE PROCEDURE

2、存储过程的创建及调用

比如: 现需要向学生表中插在入新的学生数据。但在插在入学生数据的时,需要同时检查老师表里的数据。 如果插在入学生的老师不在老师表里,则先向老师表中插在入一条老师数据,再向学生表中插在入学生数据。 步骤: 1、使用SELECT语句查询新学生的老师是否存在于老师表中; 如果不存在 ,则继续执行第2步; 如果存在,则直接跳到第3步; 2、向老师表中插在入老师数据; 3、向学生表中插在入学生数据; ## 存储过程的创建: CREATE PROCEDURE sp_add_student( IN i_student_id VARCHAR(50), IN i_student_name VARCHAR(100), IN i_gender VARCHAR(10), IN i_birth_day DATE, IN i_age INT, IN i_class_id VARCHAR(50), IN i_score DECIMAL(18,2), IN i_teacher_id VARCHAR(20) ) BEGIN IF NOT EXISTS(SELECT 1 FROM teacher WHERE teacher_id = i_teacher_id) THEN INSERT INTO teacher(teacher_id) VALUES (i_teacher_id); END IF; INSERT INTO student VALUES( i_student_id,i_student_name,i_gender,i_birth_day, i_age, i_class_id, i_score, i_teacher_id ); END; ## 存储过程的调用:使用关键字CALL CALL sp_add_student( 'S20170091', '杨艳', '女', '2003-04-09', 15, 'G0206', 89.23, 'T0021' );

3、存储过程的删除

存储过程的删除: 使用关键字DROP PROCEDURE 如:DROP PROCEDURE sp_add_student;

4、存储过程的优缺点

优点:  功能强大、灵活性高;  模块化,封装,代码复用; 缺点:  开发调试困难;  可移植性差,不同数据库,语法差别很大,移植困难;

二、触发器

1、触发器简介

触发器: 一种与表操作有关的数据库对象,当触发器所在表上出现指定事件(新增、修改、删除数据)时,将调用该对象,即表的操作事件触发表上的触发器的执行。 如上面的存储过程中: 写出了存储过程,并调用: CALL sp_add_student( 'S20170091', '杨艳', '女', '2003-04-09', 15, 'G0206', 89.23, 'T0021’ ); 如果有多个学生的数据需要插在入,则需要多次调用该存储过程; 可否不开发存储过程,在向student表插在入(INSERT)数据前,后台自动判断并插在入老师数据? ---触发器

2、触发器的创建及调用

触发器的创建:使用关键字CREATE TRIGGER 比如: 现需要向学生表中插在入新的学生数据。但在插在入学生数据的时,需要同时检查老师表里的数据。如果插在入学生的老师不在老师表里, 则先向老师表中插在入一条老师数据,再向学生表中插在入学生数据。 创建一个BEFORE INSERT触发器: CREATE TRIGGER tri_add_student BEFORE INSERT ON student FOR EACH ROW BEGIN IF NOT EXISTS(SELECT 1 FROM teacher WHERE teacher_id = new.teacher_id) THEN INSERT INTO teacher(teacher_id) VALUES (new.teacher_id); END IF; END; 执行insert语句: INSERT INTO student VALUES( 'S20170092', '李文', '女', '2002-11-19', 16, 'G0206', 55.32, 'T0022' ); BEFORE INSERT触发器: 在执行insert语句之前,会先自动执行触发器;

3、触发器的分类及执行顺序

按事件类型分:  INSERT触发器;  UPDATE触发器;  DELETE触发器; 按执行先后分:  BEFORE触发器;  AFTER触发器; NEW与OLD: INSERT触发器:NEW 用来表示将要(BEFORE)或已经(AFTER)插在入的新数据;  UPDATE触发器:OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;  DELETE触发器:OLD 用来表示将要或已经被删除的原数据; 触发器执行时的异常情况: 如果 BEFORE 触发器执行失败,SQL 无法正确执行;  SQL 执行失败时,AFTER 型触发器不会触发;  AFTER 类型的触发器执行失败,SQL 会回滚;

4、触发器的删除

触发器的删除: 使用关键字DROP TRIGGER 如:DROP TRIGGER tri_add_student;

5、触发器的优缺点

优点:  自动触发,无需调用;  提供了一种检查、保证数据完整性的方法;  与存储过程一样,增强SQL语言的功能和灵活性; 缺点:  开发调试困难;  可移植性差;

相关推荐
最新生活奇闻
猜你喜欢
  1. 娱乐新闻
  2. 日韩明星
  3. 娱乐八卦
  4. 综合影视
  5. 未解之谜
  6. 情感口述
评论
热门新闻
每周热榜
精彩推荐