首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
V2EX  ›  MySQL

mysql trigger 问题

  •  2
     
  •   NimaQu · 80 天前 · 782 次点击
    这是一个创建于 80 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一个演示站,但 admin 用户总是被改密码,不想改文件因为会导致 git pull 不方便,所以想设置一个 trigger 在有人 update 的时候自动把密码改回来,设置触发器的时候,用

    UPDATE user SET pass = '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918' WHERE user.id = '28';
    

    可以正常设置,但是在 update 的时候会提示 Can't update table 'user' in stored function/trigger because it is already used by statement which invoked this 查了下是循环导致的报错,要直接使用 set,改了下用

    CREATE DEFINER=root@localhost TRIGGER resetpasswd AFTER UPDATE ON user FOR EACH ROW set pass = '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918' WHERE id = '28';
    

    的时候 mysql 提示 ERROR 1193 (HY000): Unknown system variable 'pass' ,没学过 mysql ,查了半天也查不出究竟为什么

    9 回复  |  直到 2018-07-07 19:23:38 +08:00
        1
    ysc3839   80 天前
    set user.pass 试试?
        2
    l12ab   80 天前 via iPhone
    定时任务?
        3
    TtiGeR   80 天前 via iPhone
    与其改回来,不如直接在 Trigger 里用 SIGNAL 禁止 Update ?
        4
    NimaQu   80 天前
    @ysc3839 还是一样 emmm
        5
    yangqi   80 天前
    trigger 不能更新被激发的表,这条路别想了。只能用 stored procedure, 那个把简单问题复杂化了。

    简单的就是在代码里加上测试或者演示环境判断,禁止改密码或者用默认密码,反正就很简单了。
        6
    sker101   80 天前 via iPhone
    我 github 上的演示站点都是在代码里禁止了 比如筛选 ip 只允许特地 ip 对数据库进行操作
    这样也比 mysql 里用 trigger 灵活点 毕竟你数据库能操作的东西有限
        7
    caola   80 天前
    禁止修改密码还不简单,直接把密码 UPDATE SQL 语句的地方注释掉,永久无法 UPDATE 入库
        8
    NimaQu   79 天前
    @caola 改动代码以后 git pull 就不方便了
        9
    wewall   79 天前
    after update
    IF(
    '12' != (SELECT `table`.column1` FROM `table` WHERE `table`.`column2` = '')
    /*根据需要修改为 not in,in,=,!=*/
    )
    THEN
    UPDATE `table` SET `table`.`column1` = '12' WHERE `table`.`column2` = '';
    END IF
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   812 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 23ms · UTC 17:58 · PVG 01:58 · LAX 10:58 · JFK 13:58
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1