• 存储过程,触发器,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):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。     

  • 相关阅读:
    java基础
    JAVASE 安装步骤
    MySQL 45道练习题
    MySQL 多表查询
    2018-08-07JDBC连接MySQL+增删改表格+SQL注入问题及其预处理对象PreparedStatement解决方案
    2018-08-06Java中的异常捕获和Throw详细细节
    2018-08-03List接口方法+LinkedList方法+Vector集合+Set接口下HashSet和LinkedHashSet集合+HashCode()+equals()方法对于Set接口判断重复的详细细节
    2018-08-01集合Collection+Iterator迭代器+泛型+增强For循环
    2018-07-31包装类与基本数据类型String的转换+System类详细知识+Arrays类+大数据(BigInteger+BigDecimal)运算
    2018-07-27Final+Static+匿名对象+3中代码块
  • 原文地址:https://www.cnblogs.com/h-g-f-s123/p/6117541.html
Copyright © 2020-2023  润新知