一、触发器
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、导出数据
现在可见库里有很多数据
现在想把这些数据都导出来
或者