• 存储过程和函数练习


    -- 创建数据库
    CREATE DATABASE bigdata
    -- 使用数据库
    USE bigdata
    -- 关闭二进制日志
    SET sql_log_bin=0
    
    
    SHOW GLOBAL VARIABLES LIKE '%log_bin%'
    -- 简单介绍一下,当二进制日志启用后,这个变量就会启用。
    -- 它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。
    -- 如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 
    -- 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。 
    -- 此变量也适用于触发器的创建
    SET GLOBAL log_bin_trust_function_creators =ON
    
    -- 创建表部门表
    CREATE TABLE dept(
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
    dname VARCHAR(20) NOT NULL DEFAULT '',
    loc VARCHAR(13) NOT NULL DEFAULT '',
    num INT 
    ) ENGINE = INNODB DEFAULT CHARSET =GBK;
     
    -- 创建表员工表
    CREATE TABLE emp(
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*编号*/
    ename VARCHAR(20) NOT NULL DEFAULT '',/*名字*/
    job VARCHAR(9) NOT NULL DEFAULT '',/*工作*/
    mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上级编号*/
    hiredate DATE NOT NULL,/*入职时间*/
    sal DECIMAL(7,2) NOT NULL,/*薪水*/
    comm DECIMAL(7,2) NOT NULL,/*红利*/
    deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0/*部门编号*/
    
    ) ENGINE =INNODB DEFAULT CHARSET=gbk;
    
    -- 创建产生随机数的函数
    DELIMITER $$
    CREATE FUNCTION rand_num()
        RETURNS INT(5)
        BEGIN
        DECLARE i INT DEFAULT 0;
        SET i = FLOOR(100+RAND()*10);
        RETURN i;
    END $$
    DELIMITER ;
    
    -- 创建产生随机字符串的函数
    DELIMITER $$
    CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
        BEGIN 
            DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            DECLARE return_str VARCHAR(255) DEFAULT '';
            DECLARE i INT DEFAULT 0;
            WHILE i<n DO
            SET return_str=CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));
            SET i=i+1;
            END WHILE;
            RETURN return_str;
        END $$
    DELIMITER ;
    
    
    
    
    -- 创建插入的存储过程
    DELIMITER $$
    CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))
    BEGIN
    DECLARE i INT DEFAULT 0;
    REPEAT
    SET i=i+1;
    INSERT INTO dept (deptno,dname,loc,num) VALUES((START+i),rand_string(10),rand_string(8),RAND()*10+RAND()*100+RAND()*1000+RAND()*10000+RAND()*100000+RAND()*1000000+RAND()*10000000+RAND()*100000000);
    UNTIL i=max_num
    END REPEAT;
    COMMIT;
    END $$
    DELIMITER ;
    
    -- 创建插入的存储过程
    DELIMITER $$
    CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
    BEGIN
    DECLARE i INT DEFAULT 0;
    SET autocommit=0;
    REPEAT
    SET i=i+1;
    INSERT INTO emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES ((START+i),rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());
    UNTIL i =max_num
    END REPEAT;
    COMMIT;
    END $$
    DELIMITER ;    
    
    -- 调用存储过程 
    CALL insert_dept(1,100000000);
    CALL insert_emp(1,10000000);     
  • 相关阅读:
    Ubuntu18.04 一条命令安装caffe问题
    ubuntu18 + caffe+cpu+anaconda3
    ubuntu18+caffe+cuda
    opencv-python常用接口
    tensorflow-gpu安装
    【LabVIEW】如何给输入控件赋值
    【LabVIEW】控件初始化
    【LabVIEW】程序结构
    【LabVIEW】程序框图中错误输出后status如何调出
    【总线】ARINC 429总线协议
  • 原文地址:https://www.cnblogs.com/jdy1022/p/14029323.html
Copyright © 2020-2023  润新知