MySQL必知必会的坑

目录

第1个 从MySQL版本5.0开始,就支持在触发器中使用CALL语句来调用存储过程。

第2个Not allowed to return a result set from a trigger

第3个 使用Begin...End语句的一个坑

第4个 新版本的 MySQL 中,使用 SET PASSWORD 语句设置用户密码时,可以不使用 PASSWORD() 函数


今天学习MySQL,有一些坑真的是想不到(写的有点笨拙,小声吐槽)

找这些东西实在是有点吹吹毛求疵了,我这样学习是不对的,还是应该跟着课程学重点才好

第1个 从MySQL版本5.0开始,就支持在触发器中使用CALL语句来调用存储过程。

在25.4.4节中

但是从MySQL版本5.0开始,就支持在触发器中使用CALL语句来调用存储过程。

在此之前,MySQL确实不支持CALL语句,并且在触发器中也不支持使用存储过程。

所以,如果你使用的MySQL版本低于5.0,那么你无法在触发器中使用CALL语句。如果你需要在触发器中操作存储过程,你可以将存储过程中的代码直接放到触发器代码中,或者在触发器中调用一个函数来完成需要的操作。

第2个Not allowed to return a result set from a trigger

在25.4.1节

CREATE TRTGGER neworder AFTER TNSERT ON orders
FOR EACH ROW SELECT NEW.order_num;

--出现错误Not allowed to return a result set from a trigger

查找原因是:MYSQL5以后,不允许触发器返回任何结果

触发器调用存储过程,存储过程中返回结果集也不允许(靠)!

第3个 使用Begin...End语句的一个坑

写一个触发器,执行单条语句是OK的。

想执行多条语句,尝试在代码中加入BEGIN END。但一加BEGIN END就报错, 错误信息也很诡异,只说某一行出错了,不符合Mysql的语句规范,提示信息就个''。

这是23.3.2节的原文

问题是,他说的命令行客户机中报错,其实在workbench中他也不行,必须重新定义分隔符

不仅如此,在定义触发器时使用BEGIN END,他也不行,也要重新定义分隔符。

就很坑,害我看了半天也不知道错在哪

说是没有定义查询界定符导致,导致编译器将;识别为全部语句的结束,导致BEGIN 匹配不到END,于是报错。

解决方案是,在语句前面增加 DELIMITER // (无分号)也就是需要定义分界符。

这样改过之后,就可以运行了。

改成这样就OK了

第4个 新版本的 MySQL 中,使用 SET PASSWORD 语句设置用户密码时,可以不使用 PASSWORD() 函数

原文第28.2.4节

第5个 牛马GRANT ALL||REVOKE ALL

当这样授权时

GRANT ALL  ON users.* TO  aaa;

 不能通过这样移除权限

REVOKE ALL  ON users.* FROM aaa;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值