我们在使用Mysql数据库的时候,在项目上线迁移的时候,有时候由于开发环境和生产环境的差异,有时候
Mysql用户不一定能够保持一致,而其中view视图A用户创建的记录B用户就会无法访问
如果视图的记录比较少的话还好,如果多,那一个个重新修改创建就不太可能。
这里找到一个批量修改“定义者”的方法。
先根据如下SQL查询条件拼装出所有需要修改的视图的SQL
sql> select concat("alter DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `",TABLE_SCHEMA,"`.",TABLE_NAME," as ",VIEW_DEFINITION,";") from information_schema.VIEWS where DEFINER = 'olduser@%';
然后执行下面的SQL批量执行就可以了
alter DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test`.test_view as select `t`.`storeid` AS `storeid` from (`test`.`sc_saleorder_pdt` `t` left join `test`.`sc_saleorder` `m` on((`t`.`dataid` = `m`.`id`))) where (`m`.`jhtype` = 'wl'); alter DEFINER=`root`@`localhost`