MySQL入门(12)——触发器、存贮过程及导入导出数据

一、触发器

MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT,UPDATE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会激发触发器执相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

触发器是个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MySQL自动调用。

1、创建只有一个执行语句的触发器

(1)语法:

 CREATE TRIGGER trigger_name trigger_time trigger_event
 ON tab_name FOR EACH ROW trigger_stmt

trigger_name:触发器名称,用户自行指定;
trigger_time :触发时机,可以指定为before或after;
trigger_event:触发事件,包括INSERT,UPDATE和DELETE;
tab_name:要建立触发器的表名;
trigger_stmt:触发器执行语句。

 CREATE TABLE book2(
     id int AUTO_INCREMENT PRIMARY KEY ,
     bookname varchar(255) NOT NULL
 );
 ALTER TABLE book  ADD INDEX name_idx(bookname);

(2)创建触发器,在book表中插入一条数据时自动在book2中插入一条

 CREATE TRIGGER book_insert_select 
 AFTER INSERT ON book FOR EACH ROW INSERT INTO book2(bookname) 
 SELECT bookname FROM book;
 INSERT INTO book(bookname)VALUES ('《平凡的世界2》');

(3) 查看触发器

 SHOW TRIGGERS ;

(4)也可以在triggers表中查看触发器

 SELECT * FROM information_schema.triggers;

(5)删除触发器

 DROP TRIGGER book_insert_select;

2、 创建有多个执行语句的触发器

(1)语法

CREATE TRIGGER trigger_name trigger_time trigger_event
 ON tab_name FOR EACH ROW 
 BEGIN    
 语句执行列表
 END

trigger_name:触发器名称,用户自行指定;
trigger_time :触发时机,可以指定为before或after;
trigger_event:触发事件,包括INSERT,UPDATE和DELETE;
tab_name:要建立触发器的表名;
这个可以在BEGIN,END之间包含多条语句。

(2)示例

 CREATE TRIGGER book_insert_select AFTER INSERT ON book FOR EACH ROW
 BEGIN
 INSERT INTO book2(bookname) SELECT bookname FROM book;
 INSERT INTO book3(bookname) SELECT bookname FROM book;
 END

二、存储过程

简单的说存储过程就是一条或者多条语句的集合,可视为批文件,但是其作用不仅限于批处理。

MySQL中,创建存储过程的基本形式如下:

   CREATE PROCEDURE  存储过程名 (参数列表)
   BEGIN    
     SQL语句代码块
   END

其中参数列表的形式如下:

[IN|OUT|INOUT] param_name type

其中in表示输入参数,out表示输出参数,inout表示既可以输入也可以输出
param_name表示参数名称
type表示参数的类型,该类型可以是MYSQL数据库中的任意类型

1、创建存储过程:

 CREATE PROCEDURE my_test()
 BEGIN
     SELECT * FROM book;
 END;

在这里插入图片描述
2、调用存储过程

 CALL my_test();

3、删除存储过程

 DROP PROCEDURE my_test;

但是现在已经很少使用存储过程,所以只做了解即可

 CREATE PROCEDURE my_test()
 BEGIN

     DECLARE i int DEFAULT 0;    #declare 定义变量i 
     WHILE i<10 do
         INSERT INTO book (bookname) VALUES (concat('悲惨的世界',i));
         SET i=i+1;
     end WHILE ;
 END;

三、导入和导出数据

1、导出数据

现在可见库里有很多数据
在这里插入图片描述
现在想把这些数据都导出来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
或者
在这里插入图片描述
在这里插入图片描述

2、导入数据

在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值