SQL语句之 知识补充
一.存储过程
运用SQL语句,写出一个像函数的模块,这就是存储过程。
需求: 编写存储过程,查询所有员工 -- 创建存储过程(必须要指定结束符号) -- 定义结束符号 DELIMITER $ CREATE PROCEDURE pro_test() BEGIN SELECT * FROM student; END $ CALL pro_test -- 调用存储过程 创建存储语句: delimiter 结束符号 create procedure 存储过程名称( 参数列表 out value varchar(20))//利用系统变量输出数据 begin -- 开始 sql语句1 sql语句2 end 结束符号 调用存储过程语法: call 存储过程名称(参数,@value); Select @value; 参数类型: IN : 输入参数,把参数带入存储过程 OUT: 输出参数,把结果随着参数带出到外面 INOUT: 输入输出。 输入+输出 |
二.触发器
触发器
在数据库服务器中执行了某些操作之后,希望触发一些事件、动作。就可以使用触发器
触发器案例
需求 : 当往employee表插入一条数据时,把该插入数据的动作记录到另一张表 logs
解决办法:编写一个触发器,监听employee表的数据插入。
-- *********四、 触发器*********** -- 创建日志表 CREATE TABLE tri_logs( content VARCHAR(100) ) -- 创建添加触发器 触发器的名字 操作 创建在哪个表 CREATE TRIGGER tri_addEmp AFTER INSERT ON employee FOR EACH ROW -- 往employee表插入一条记录时 INSERT INTO tri_logs(content) VALUES('用户往employee表插入记录'); 触发后的操作 -- 创建修改触发器 CREATE TRIGGER tri_updEmp AFTER UPDATE ON employee FOR EACH ROW INSERT INTO tri_logs(content) VALUES('用户修改了employee表记录'); -- 创建删除触发器 CREATE TRIGGER tri_delEmp AFTER DELETE ON employee FOR EACH ROW INSERT INTO tri_logs(content) VALUES('用户删除了employee表记录'); -- 往员工表插入数据 INSERT INTO employee(ename, deptId) VALUES('eric',4); -- 修改 UPDATE employee SET ename='jacky' WHERE eid=7; -- 删除 DELETE FROM employee WHERE eid=7; -- 查询 SELECT * FROM employee; SELECT * FROM tri_logs; |
MySQL数据库备份和还原
备份语句: mysqldump -u root -p day17 > c:/bak.sql 执行次命令不需要登录
还原语句: mysql -u root -p day17 < d:/back.sql
MySQL数据库权限问题
-- ********** 五、 MySQL数据库权限问题 **** -- 安装mysql的时候,使用默认用户root,root是超级管理员,拥有对数据库的所有权限。(为了学习) -- 实际应用中,会有数据库角色配置。例如张三只能查看数据,李四只能创建表,不能删除表。 -- 目标: 根据不同角色给不同用户分配数据库操作权限 -- 修改用户的密码 -- mysql数据库是存储mysql数据库软件用户信息 USE mysql; SHOW TABLES; -- 查询mysql.user表 SELECT * FROM USER; -- 密码加密函数 SELECT PASSWORD('root'); -- *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B -- 修改root密码 UPDATE USER SET PASSWORD=PASSWORD('123456') WHERE USER='root'; -- 给用户分配权限 GRANT SELECT ON day16.employee TO 'eric'@'localhost' IDENTIFIED BY '123456'; GRANT SELECT ON day16.dept TO 'eric'@'localhost' IDENTIFIED BY '123456'; |