存储过程,触发器,Mysql权限,备份还原

一、存储过程(优点:执行快;缺点:移植性差)

1、创建存储过程:

DELIMITER $

CREATE PROCEDURE pro_test();

BEGIN

--可以写多个sql

END $;

调用存储过程:

CALL pro_test();

删除存储过程:

DROP PROCEDURE 存储过程名字;

2、 带有输入参数的存储过程

-- 需求:传入一个员工的id,查询员工信息

DELIMITER $

CREATE PROCEDURE pro_findById(IN eid INT)  -- IN: 输入参数

BEGIN

         SELECT * FROM employee WHERE id=eid;

END $

-- 调用

CALL pro_findById(4);

3、 带有输出参数的存储过程

DELIMITER $

CREATE PROCEDURE pro_testOut(OUT str VARCHAR(20))  -- OUT:输出参数

BEGIN

        -- 给参数赋值

         SET str='helljava';

END $

-- 1)定义一个会话变量name, 2)使用name会话变量接收存储过程的返回值

CALL pro_testOut(@NAME);

-- 查看变量值

SELECT @NAME;

4、带有输入输出参数的存储过程

DELIMITER $

CREATE PROCEDURE pro_testInOut(INOUT n INT)  -- INOUT: 输入输出参数

BEGIN

   -- 查看变量

   SELECT n;

   SET n =500;

END $

-- 调用

SET @n=10;

CALL pro_testInOut(@n);

SELECT @n;

5、带有条件判断的存储过程

-- 需求:输入一个整数,如果1,则返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他数字,返回“错误输入”;

DELIMITER $

CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20))

BEGIN

         IF num=1 THEN

                   SET str='星期一';

         ELSEIF num=2 THEN

                   SET str='星期二';

         ELSEIF num=3 THEN

                   SET str='星期三';

         ELSE

                   SET str='输入错误';

         END IF;

END $

--调用

CALL pro_testIf(4,@str);

SELECT @str;

6、带有循环功能的存储过程

-- 需求: 输入一个整数,求和。例如,输入100,统计1-100的和

DELIMITER $

CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)

BEGIN

         -- 定义一个局部变量

         DECLARE i INT DEFAULT 1;

         DECLARE vsum INT DEFAULT 0;

         WHILE i<=num DO

               SET vsum = vsum+i;

               SET i=i+1;

         END WHILE;

         SET result=vsum;

END $

--调用

CALL pro_testWhile(100,@result);

--查询

SELECT @result;

7、使用查询的结果赋值给变量(INTO)

DELIMITER $

CREATE PROCEDURE pro_findById2(IN eid INT,OUT vname VARCHAR(20) )

BEGIN

         SELECT empName INTO vname FROM employee WHERE id=eid;

END $

 --调用

CALL pro_findById2(1,@NAME);

 --查询

SELECT @NAME;

二、触发器(当操作了某张表时,希望同时触发一些动作/行为)

例如: 当向员工表插入一条记录时,希望同时往日志表插入数据

1、创建触发器(添加)

CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW    -- 当往员工表插入一条记录时

     INSERT INTO test_log(content) VALUES('员工表插入了一条记录');

2、创建触发器(修改)

CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW    -- 当往员工表修改一条记录时

     INSERT INTO test_log(content) VALUES('员工表修改了一条记录');

3、创建触发器(删除)

CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW    -- 当往员工表删除一条记录时

     INSERT INTO test_log(content) VALUES('员工表删除了一条记录');

三、mysql权限

1、修改用户密码,注意MD5加密

UPDATE USER SET PASSWORD=PASSWORD('123456') WHERE USER='root';

2、分配权限账户

GRANT SELECT ON 数据库名.表名 TO '用户名'@'localhost' IDENTIFIED BY '123456';

四、备份还原

1、mysqldump -u root -p 数据看名字 > E:数据库名字.sql

2、还原

   首先mysql -u root -p,回车填写密码登录。然后创建需要还原的数据库,比如test。create database test;接着》use test;在接着;source 数据库名字.sql。

 五、事务四大特性(简称ACID) 

1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。

2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。

3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。

4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。     

原文地址:https://www.cnblogs.com/h-g-f-s123/p/6117541.html