首页 > 代码库 > SQL语句之 知识补充

SQL语句之 知识补充

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的时候,使用默认用户rootroot是超级管理员,拥有对数据库的所有权限。(为了学习)

-- 实际应用中,会有数据库角色配置。例如张三只能查看数据,李四只能创建表,不能删除表。

-- 目标: 根据不同角色给不同用户分配数据库操作权限

 

-- 修改用户的密码

-- 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‘;

SQL语句之 知识补充