以下demo代码在mariaDB 5.5.58 + SQLyog 10.2下测试通过。
1.简单的传入要插入的参数,执行sql插入示例
1)创建函数
在SQLyog中写出以下代码并执行:
DELIMITER // /*将mysql默认的定界符改为“//”,这样就可以在下面的函数中使用“;”了*/
DROP FUNCTION IF EXISTS insertItemTwo// /*先事先删除该函数*/
CREATE FUNCTION insertItemTwo(username VARCHAR(20),record VARCHAR(20),number INT) RETURNS VARCHAR(20)
BEGIN
INSERT INTO item VALUES(NULL,username,record,number);
RETURN 'success';
END
//
DELIMITER ;
注:在创建函数的时候,报了一个错误:
Thisfunction has none of DETERMINISTIC, NO SQL, or READS SQL DATA in itsdeclaration and binary log
在网上查了一下,原因是mysql默认不允许创建函数。只要执行这句话就行了:
SETGLOBAL log_bin_trust_function_creators = 1;
2)调用函数
再打开一个查询窗口,执行
SELECT insertItemTwo('asd','ffff',123);
结果:
2. 将指定数据循环插入若干次的函数
2.1 while do语句
1)创建
DELIMITER //
DROP FUNCTION insertItem5//
CREATE FUNCTION insertItem5(username VARCHAR(20),record VARCHAR(20),number INT,loopNumber INT) RETURNS VARCHAR(200)
BEGIN
DECLARE flage INT DEFAULT 0;
WHILE flage < loopNumber DO
INSERT INTO item VALUES(NULL,username,record,number);
SET flage = flage + 1;
END WHILE;
RETURN CONCAT('success insert ',flage,' rows!') ;
END
//
DELIMITER ;
2)调用
SELECT insertItem5('jkjkjk','ddfggh',123,10);
结果:
2.2 loop语句
1)创建
DELIMITER //
DROP FUNCTION IF EXISTS insertItem6//
CREATE FUNCTION insertItem6(username VARCHAR(20),record VARCHAR(20),number INT,loopNumber INT) RETURNS VARCHAR(200)
BEGIN
DECLARE flage INT DEFAULT 0;
loop_example:LOOP
SET flage = flage + 1;
IF flage > loopNumber THEN
LEAVE loop_example;
ELSE
INSERT INTO item VALUES(NULL,CONCAT(username,flage),record,number);
END IF;
END LOOP;
RETURN CONCAT('success insert ',flage,' rows!') ;
END
//
DELIMITER ;
2) 调用
SELECT insertItem6('jkjkjk','ddfggh',123,10);
结果:
2.3 repeat
1)创建
DELIMITER //
DROP FUNCTION IF EXISTS insertItem7//
CREATE FUNCTION insertItem7(username VARCHAR(20),record VARCHAR(20),number INT,loopNumber INT) RETURNS VARCHAR(200)
BEGIN
DECLARE flage INT DEFAULT 0;
REPEAT
SET flage = flage + 1;
INSERT INTO item VALUES(NULL,CONCAT(username,flage),record,number);
UNTIL flage >= loopNumber
END REPEAT;
RETURN CONCAT('success insert ',flage,' rows!') ;
END
//
DELIMITER ;
2)调用
SELECT insertItem7('jkjkjk','ddfggh',123,10);
结果:
总结:
1. 上面的内容通过对loop、while、repeat的循环语句,if else的条件判断语句的简单使用,演示了函数的创建,基本语法:
CREATE FUNCTION([参数名与类型])[returns type]
2. 调用:
select 函数名字(参数...)
3. 同时要注意定界符号的修改与恢复呦:“;”。