10分钟学会MySQL 函数(使用方法,看完即用)
准备测试数据
登录mysql,复制粘贴,运行即可
drop database if exists mytest;
create database mytest default character set utf8;
use mytest;
DROP TABLE IF EXISTS emp;
CREATE TABLE emp (
id int(11) PRIMARY KEY AUTO_INCREMENT,
age int(11) DEFAULT NULL,
name varchar(50) DEFAULT NULL
)DEFAULT CHARSET=utf8;
INSERT INTO `emp` VALUES (1, 18, '张三');
INSERT INTO `emp` VALUES (2, 20, '李四');
INSERT INTO `emp` VALUES (3, 25, '王五');
INSERT INTO `emp` VALUES (4, 22, '赵六');
DROP TABLE IF EXISTS log;
CREATE TABLE log (
id int(11) PRIMARY KEY AUTO_INCREMENT,
action varchar(50) DEFAULT NULL,
uid int(11) DEFAULT NULL,
time datetime DEFAULT NULL
)DEFAULT CHARSET=utf8;
2.函数
mysql中有内置函数,比如: now(),当然我们也可以自己封装!
2.1 创建函数
语法:
create function 函数名(参数列表) returns 返回值类型 begin 执行语句; return ...; end;
注意:函数必须有返回值!
案例:封装一个根据id查询name的自定义函数:
create function getName(my_id int) returns varchar(50) begin declare my_name varchar(32) default ''; select name into my_name from emp where id=my_id; return my_name; end;
2.2 执行函数
select 函数名(参数列表);
2.3 删除函数
drop function 函数名;
3.触发器
概念:根据对表的操作自动触发一些动作,触发条件可以是:insert,update,delete
创建触发器:
create trigger 触发器名 after 操作 on 表名 for each row begin 触发后执行的语句; end;
说明:
1. after 表示之后,也可以使用before 表示之前
2. 操作 on 表名 : 表示对哪个表做什么操作时触发
3. for each row: 表示行级别
案例:对emp表插入数据后,自动触发执行sql语句往log表中写入数据(自动完成的)。
create trigger emp_tr after insert on emp for each row begin insert into log(action,uid,time) values('insert',NEW.id,now()); end; 参数解释: NEW 中包含的是新插入的数据 OLD 中包含老数据
查询触发器:show triggers;
删除触发器:drop trigger 触发器名;