5. 触发器和常用函数 加密函数-mysql

触发器是由事件来触发的,和update,insert和delete操作相对应。当数据库系统执行这些操作的时候,激活触发器做出相应的操作。

创建只有一个执行语句的触发器 较为简单 易于理解

比如说有两个图书表t_book和t_bookType,一个存放各图书的信息,都有哪些图书;一个存放图书的类别,各个类别下都有多少本书,记录着各个类别图书的数量。如下图


现在往t_book里面加入一本新数学类的书《运筹学》。那么完成一个触发器就是插入新的书本之后,对应类别的记录书数量的值也要改变,这就是这个触发器的主要功能。

创建一个触发器:执行时间插入之后 这里有一个new对象,指的就是新插入的记录,删除的时候那就是old了。

CREATE TRIGGER trig_book AFTER INSERT
		ON t_book FOR EACH ROW
		UPDATE t_booktype SET bookCount = bookCount + 1 
WHERE new.bookType = t_booktpe.id;

测试插入新数据

INSERT INTO t_book VALUES(NULL, '运筹学', 35, 4);


可以看出触发器是完成了将t_bookType表中对应图书类别数量加1了。

多个执行语句的触发器

上面的只有一个执行语句的触发器,触发器只做了一个操作,对应类别数量加一。

完成多个执行语句的触发器, 语法相同。

比如:完成一个包含多个执行语句的触发器,要求在删除t_book表的一条记录之后,做2个操作:

1、更新统计图书数量 数量应该自减1

2、插入一条日志信息,在某某时间做了一次删除操作。这个另外建一张表t_log

t_log表结构

触发器的创建 delimiter && 作用在于由于mysql执行语句的时候,遇到分号就直接执行了,这里由于有多条语句 多个分号 就用它把它框起来 这个意思 设置结束符 从哪开始 到哪结束。

delimiter &&
CREATE TRIGGER dept_trig2 AFTER DELETE ON t_book FOR EACH ROW
			BEGIN
				INSERT INTO t_log VALUE(NULL, NOW(), '当前对t_book

表执行了一次删除操作');
				UPDATE t_booktype SET bookCount = bookCount - 1 
				where old.bookType = t_booktype.id;
			END
			&&
delimiter;

删除语句测试

DELETE FROM t_book WHERE bookName='运筹学';

测试结果:


触发器就可以看成是一个事件监听处理,对数据库的一系列动作进行判断,从而执行对应的操作。


MYSQL常用函数

一、日期类函数

1.CURDATE( ) 返回当前日期

2.CURTIME()返回当前的时间

3.MONTH(d)返回日期d中的月份值,1-12

更多的函数 查一下 用法都是一样的

二、字符串函数

计算字符串长度函数 CHAR_LENGTH(s)

大小写转化函数UPPER(s) LOWER(s)

三、数学函数

常见的数学函数 就是求根,取余,求对绝对值函数等等 不想敲了

四、加密函数

加密函数还是比较重要的,一个账户的密码存入数据库表,存的肯定不是明文,而是加密之后的密文,所以平时生活中忘记密码找回密码的时候只有重新设置一个密码,而没有找到原来的密码。所以也不用担心 数据库泄漏会将自己的密码泄漏出去,存放都是密码加密之后的密文 通常都是 MD5加密。

1.PASSWORD(str) 不可逆加密

2.MD5(str)  不可逆加密

3.ENCODE(str, passwd_str) 可逆的加密函数, 第二个参数是密钥,,结果是一个二进制数 定义字段也应是二进制

4.DECODE(cpt_str, paswd_str)用密钥解密的解密函数 同样第二个参数是密钥

建一个表分别试一下MD5加密和ENCODE加密


INSERT INTO t_passwd VALUES(NULL, MD5('zheshimd5passwd'), ENCODE('encodepasswd','kwen'));

表中加密的数据如上 和密码一点都不像

md5加密是不可逆的,验证密码正确的时候,将用户输入的密码通过md5函数转化为字符串和数据库表中判断,从而返回密码是否正确的结果。

而encode加密可以通过密钥解密出密码 但验证密码正确性应该也是通过判断密文 而不是解密出明文,这样子安全。

 select decode(passwd2, 'kwen') from t_passwd;

这个加密函数是可以通过密钥,密文解密出明文的。

猜你喜欢

转载自blog.csdn.net/yvken_zh/article/details/80792371