mysql触发器。mysql安全,mysql用户与权限管理。 电脑版发表于:2021/9/16 17:20 ## MySQL触发器 #### 什么是触发器: 触发器是个特殊的存储过程,不是由用户触发,是系统根据事件来触发。对表操作比如 添加,删除,修改。 也就是在进行DML操作的时候可以触发我们自己写的逻辑 #### 触发器的作用: 数据同步(数据同步更新,同步修改), 做一些数据自定义约束.....,可以根据具体业务来实现 #### 触发时间: 操作之前和操作之后,比如添加之前执行,添加之后执行,更新之前,更新之后...... 操作之前: before 触发事件 操作之后: after 触发事件 #### 触发器的NEW和OLD new涉及到新数据的时候可以使用,比如添加与更新 old涉及到旧数据的时候可以用,比如删除的时候 #### 简单例子: 添加一个insert之和的触发器。添加class表的时候向test表也添加内容。 ```sql create TRIGGER tri_insert after insert on class for each row begin insert into test values(new.Id); end ``` 加一个update之后的触发器 ``` -- 添加一个update之后的触发器。 create trigger tri_update after update on class for each row begin insert into test values(old.Id); end ``` #### 实际一点的使用,添加,更新,删除触发器 ``` -- 添加的触发器,向stu_daily_assignment表添加的时候同步像alltask_index表写入一条数据。a表的id写入的是alltask_index表中的CompleteTaskId create TRIGGER stu_daily_assignment_insert after insert on stu_daily_assignment for each row begin -- 取当前的日期时间 declare nowdata datetime; SET nowdata = NOW(); insert into alltask_index values(REPLACE(UUID(), '-', ''),'StuDailyAssignment',new.Id,new.DAStatus,new.ClassId,new.CreateTime,new.CreateTime,nowdata,nowdata,'添加触发器添加的'); end -- 删除的触发器。向stu_daily_assignment表删除的时候同步删除alltask_index表对应的数据 create TRIGGER stu_daily_assignment_delete after delete on stu_daily_assignment for each row begin -- 同步删除数据 delete from alltask_index where CompleteTaskType = 'StuDailyAssignment' and CompleteTaskId = old.Id; end -- 更新的触发器,就同步更新DAStatus字段即可 create TRIGGER stu_daily_assignment_update after update on stu_daily_assignment for each row begin -- 同步更新DAStatus字段 update alltask_index set DAStatus = new.DAStatus where CompleteTaskType = 'StuDailyAssignment' and CompleteTaskId = old.Id; end select * from alltask_index where Remark = '添加触发器添加的' and ID = '20d3790250a511efbf9d0242ac150002' select * from stu_daily_assignment where id = '1819281825672073216' -- 测试更新的时候触发 -- update stu_daily_assignment set DAStatus = 1 where id = '1819281825672073216' ``` ## MySQL用户管理 **系统所有的用户,默认是在mysql数据库下的user表中的,查询用户如下:** select * from user **创建用户与删除用户** %表示所有ip地址可以访问,localhost表示只能本地访问 ``` -- 创建用户 create user 'aj'@'%' identified by '123456' -- 删除用户 drop user 'aj'@'localhost' ``` **修改用户密码:** mysql_native_password可以省略 ``` alter user 'aj'@'%' identified with mysql_native_password by '123' ``` ## MySQL权限管理 #### 查询用户的权限: ``` Show grants for ‘用户名’@’主机名’ ``` #### 授权: ``` Grant 权限 on 数据库.表 to ‘用户名’@’主机名’ ``` #### 撤销权限: ``` revoke 权限 on 数据库.表 from ‘用户名’@’主机名’ ``` #### 实例: ``` -- 查询权限 show grants for 'aj'@'%' -- 授予权限 grant all on oa1212.* to 'aj'@'%' --撤销权限 revoke all on oa1212.* from 'aj'@'%' ```