Mysql批量資料匯入
阿新 • • 發佈:2019-02-07
建庫
建立資料庫指令碼
CREATE DATABASE bigDate;
USE bigDate;
建表
1.建立emp表
CREATE TABLE `emp` ( `id` int(11) NOTNULL AUTO_INCREMENT COMMENT 'id', `empno`mediumint(9) NOT NULL DEFAULT '0' COMMENT '編號', `ename`varchar(20) NOT NULL DEFAULT '""' COMMENT '名字', `job` varchar(9)NOT NULL DEFAULT '""' COMMENT '工作', `mgr` mediumint(9)NOT NULL DEFAULT '0' COMMENT '上級編號', `hiredate` dateNOT NULL COMMENT '入職時間', `sal` decimal(10,2)NOT NULL COMMENT '薪水', `comm`decimal(10,2) NOT NULL COMMENT '紅利', `deptno`mediumint(9) NOT NULL DEFAULT '0' COMMENT '部門編號', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.建立dept表
CREATE TABLE `dept` ( `id` int(11) NOTNULL AUTO_INCREMENT COMMENT 'id', `deptno`mediumint(9) DEFAULT '0' COMMENT '部門編號', `dname`varchar(20) NOT NULL DEFAULT '""' COMMENT '部門名稱', `Ioc` varchar(13)NOT NULL DEFAULT '""' COMMENT '所在樓層', PRIMARY KEY(`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
設定引數
在建立函式,如果報錯:This function has none of DETERMINISTIC………………..
這是由於開啟過慢查詢日誌,因為我們開啟了bin-log,我們就必須為我們的function制定一個引數。
基本命令:
set variables like ‘log_bin_trust_function_creators’;
基本命令:
setglobal log_bin_trust_function_creators=1;
永久的生效的方法:
在linux下,/etc/my.cnf下my.cnf[mysqld]加上log_bin_trust_function_creators=1
在windowns下,my.ini[mysqld]上log_bin_trust_function_creators=1
建立函式
1.隨機產生字串
DELIMITER $$
CREATE FUNCTION rand_string(n INT) RETURNSVARCHAR(255)
BEGIN
DECLARE chars_str VARCHAR(100) DEFAULT'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
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 ;
2.隨機產生部門編號
DELIMITER $$
CREATE
FUNCTION rand_num()
RETURNS INT(5)
BEGIN
DECLARE i INT DEFAULT 0;
SET i=FLOOR(100+RAND()*10);
RETURN i;
END$$
DELIMITER ;
建立儲存過程
1.建立插入emp表儲存過程
DELIMITER $$
CREATE
PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
#set autocommit=0 把autocommit設定成0
SET autocommit=0;
REPEAT
SET i=i+1;
INSERT INTOemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES((START+i),rand_string(6),'SALESMAIN',0001,CURDATE(),2000,400,rand_num());
UNTIL i=max_num
END REPEAT;
COMMIT;
END$$
DELIMITER ;
2.建立插入dept表儲存過程
DELIMITER $$
CREATE
PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
SET autocommit=0;
REPEAT
SET i=i+1;
INSERT INTOdept(deptno,dname,Ioc)VALUES((START+i),rand_string(10),rand_string(8));
UNTIL i=max_num
END REPEAT;
COMMIT;
END$$
DELIMITER ;
呼叫儲存過程
1.呼叫插入dept儲存過程
基本命令: CALL insert_dept(100,10);
2.呼叫插入emp儲存過程
基本命令:CALL insert_emp(100001,500000);