zoukankan      html  css  js  c++  java
  • mysql 存储过程 函数 触发器

    mysql存储过程与函数

    存储过程demo

    mysql> delimiter //  -- 这里//为修改默认分隔符;
    
    
    mysql> CREATE  PROCEDURE simpleproc (OUT param1 INT)
        -> BEGIN
        ->   SELECT  COUNT(*) INTO param1 FROM t;
        -> END//
    Query OK, 0 rows affected (0.00 sec)
    
    
    mysql> delimiter ;      // -- 改回来这里的默认分隔符为;

    这里调用试用call

    mysql> CALL simpleproc(@a);  
    mysql> select @a;

    函数demo

    参数没有输入输出参数

    mysql> CREATE  FUNCTION hello (s CHAR(20))
    mysql> RETURNS  CHAR(50) DETERMINISTIC
        -> RETURN  CONCAT('Hello, ',s,'!');

    这里调用试用 select,和普通函数一样了

    mysql> SELECT hello('world');
    +----------------+
    | hello('world') |
    +----------------+
    | Hello, world!  |
    +----------------+

    变量的使用

    declare last_month_start DATE;
    DECLARE my_sql  INT  DEFAULT 10 ;
    set var_name = 2;

    流程控制

    CREATE DEFINER=`root`@`localhost` PROCEDURE `student_insert`()
    BEGIN
        set @x=0;
        ins :LOOP
            set @x = @x +1;
            if @x=100 then
                leave ins;
            end if;
            insert into student (stuname) values (CONCAT("name",@x));
        END LOOP ins;
    END
    
    CREATE DEFINER=`root`@`localhost` PROCEDURE `student_insert2`()
    BEGIN
        set @x=100;
        ins :LOOP
            set @x = @x +1;
            if @x=120 then
                leave ins;
            elseif mod(@x,2) = 0 then
                iterate ins;
            end if;
            insert into student (stuname) values (CONCAT("name",@x));
        END LOOP ins;
    END
    
    CREATE DEFINER=`root`@`localhost` PROCEDURE `loop_demo`()
    BEGIN
        set @x=1 ,@x1=1;
        repeat
            set @x = @x +1;
        until @x > 0 end repeat;
        
        while @x1 < 2 do
            set @x1=@x1+1;
        end while;
    END
    游标的使用
    CREATE DEFINER=`root`@`localhost` PROCEDURE `cursor_demo`()
    BEGIN
        declare i_stuid int;
        declare i_stuname varchar(20);
        declare cur_stu cursor for select stuid,stuname from student;
        declare exit handler for not found close cur_stu;
        
        set @x1 = 0;
        set @x2 = 0;
        
        open cur_stu;
        
        repeat
            fetch cur_stu into i_stuid,i_stuname;
            select i_stuid,i_stuname;
        until 0 end repeat;
        
        close cur_stu;
    END
    
    
    CREATE DEFINER=`root`@`localhost` PROCEDURE `cursor_demo3`()
    BEGIN
      DECLARE done INT DEFAULT 0;
      DECLARE a CHAR(16);
      DECLARE b,c INT;
      DECLARE cur1 CURSOR FOR SELECT stuname,stuid FROM `student`;
      DECLARE cur2 CURSOR FOR SELECT subid FROM `subject`;
      DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
     
      OPEN cur1;
      OPEN cur2;
     
      REPEAT
        FETCH cur1 INTO a, b;
        FETCH cur2 INTO c;
        IF NOT done THEN
           SELECT a,b,c;
        END IF;
      UNTIL done END REPEAT;
     
      CLOSE cur1;
      CLOSE cur2;
    END
    触发器

    必须建立在真实表之上,适合一些初始化数据

    CREATE TABLE test1(a1 INT);
    CREATE TABLE test2(a2 INT);
    CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
    CREATE TABLE test4(
      a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
      b4 INT DEFAULT 0
    );
     
    DELIMITER |
     
    CREATE TRIGGER testref BEFORE INSERT ON test1
      FOR EACH ROW BEGIN
        INSERT INTO test2 SET a2 = NEW.a1;
        DELETE FROM test3 WHERE a3 = NEW.a1;  
        UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
      END
    |
     
    DELIMITER ;
     
    INSERT INTO test3 (a3) VALUES 
      (NULL), (NULL), (NULL), (NULL), (NULL), 
      (NULL), (NULL), (NULL), (NULL), (NULL);
     
    INSERT INTO test4 (a4) VALUES 
      (0), (0), (0), (0), (0), (0), (0), (0), (0), (0);
    查看索引
    show index from table

    mysql常用导出数据命令:
    1.mysql导出整个数据库
      mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql  
      mysqldump -hlocalhost -uroot hqgr> hqgr.sql     (如果root用户没用密码可以不写-p,当然导出的sql文件你可以制定一个路径,未指定则存放在mysql的bin目录下)

    2.mysql导出数据库一个表
      mysqldump -hhostname -uusername -ppassword database  tablename> 导出的文件名
      mysqldump -hlocalhost -uroot hqgr t_ug_user> user.sql

    3.mysql导出一个数据库结构
     mysqldump -hhostname -uusername -ppassword  -d --add-drop-table databasename>d:hqgrstructure.sql
     -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

    4.如果需要导出mysql里面的函数或者存储过程
      mysqldump -hhostname -uusername -ppassword -ntd -R databasename > backupflie.sql
      mysqldump -hlocalhost -uroot -ntd -R hqgr > hqgr.sql
      其中的 -ntd 是表示导出存储过程;-R是表示导出函数

    mysql常用导入数据的命令:
    1.mysql命令
      mysql -hhostname -uusername - ppassword databasename < backupfile.sql
    2.source命令
      mysql>source backupfile.sql

  • 相关阅读:
    React Native移动框架功能研究
    移动app框架inoic功能研究
    使用Ivy管理项目中的依赖
    使用Ant自动化我们的java项目生成
    Java构建工具Ant小记(一)
    打造Ubuntu下Java开发环境
    解决系统系统管理员不允许使用保存的凭据登录远程计算机
    Ubuntu全新安装firefox最新版本
    jQuery Ready 与 Window onload 的区别(转)
    程序员的素养
  • 原文地址:https://www.cnblogs.com/icyy/p/5504153.html
Copyright © 2011-2022 走看看