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
NimaQu
V2EX  ›  MySQL

mysql trigger 问题

  •  2
     
  •   NimaQu · 2018-07-06 23:54:52 +08:00 · 3455 次点击
    这是一个创建于 2330 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一个演示站,但 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
    ysc3839
        1
    ysc3839  
       2018-07-07 00:37:24 +08:00
    set user.pass 试试?
    l12ab
        2
    l12ab  
       2018-07-07 00:49:57 +08:00 via iPhone
    定时任务?
    TtiGeR
        3
    TtiGeR  
       2018-07-07 01:18:44 +08:00 via iPhone
    与其改回来,不如直接在 Trigger 里用 SIGNAL 禁止 Update ?
    NimaQu
        4
    NimaQu  
    OP
       2018-07-07 01:36:49 +08:00
    @ysc3839 还是一样 emmm
    yangqi
        5
    yangqi  
       2018-07-07 01:38:56 +08:00
    trigger 不能更新被激发的表,这条路别想了。只能用 stored procedure, 那个把简单问题复杂化了。

    简单的就是在代码里加上测试或者演示环境判断,禁止改密码或者用默认密码,反正就很简单了。
    sker101
        6
    sker101  
       2018-07-07 01:44:28 +08:00 via iPhone
    我 github 上的演示站点都是在代码里禁止了 比如筛选 ip 只允许特地 ip 对数据库进行操作
    这样也比 mysql 里用 trigger 灵活点 毕竟你数据库能操作的东西有限
    caola
        7
    caola  
       2018-07-07 01:46:09 +08:00
    禁止修改密码还不简单,直接把密码 UPDATE SQL 语句的地方注释掉,永久无法 UPDATE 入库
    NimaQu
        8
    NimaQu  
    OP
       2018-07-07 02:06:49 +08:00
    @caola 改动代码以后 git pull 就不方便了
    wewall
        9
    wewall  
       2018-07-07 19:23:38 +08:00
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:51 · PVG 18:51 · LAX 02:51 · JFK 05:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.