-- 查看存储过程 SHOW PROCEDURE STATUS; -- 显示pro存储过程的详细信息 SHOW CREATE PROCEDURE pro; -- 删除pro存储过程 DROP PROCEDURE IF EXISTS pro; -- 创建简单的存储过程 DELIMITER // DROP PROCEDURE IF EXISTS pro// CREATE PROCEDURE pro() BEGIN SELECT 1; END// DELIMITER ; -- 调用存储过程 CALL pro(); -- 创建带输入参数的存储过程 DELIMITER // DROP PROCEDURE IF EXISTS pro// CREATE PROCEDURE postVisitor(IN input INT) -- 批量插入visitor数据 BEGIN -- 声明一个int类型的变量 DECLARE i INT; SET i = 0; WHILE i < input DO INSERT INTO visitor(hid,ecid,cid,uid,`name`,phone,photo,car_plate,`status`,euid,appointment_time,visit_time,create_time) VALUES(1,1,1,1,CONCAT('L',i),CONCAT('1850040899',i),'http://7xtge5.com2.z0.glb.clouddn.com/logo.png',CONCAT('京A-8251',i),IF(i%2=0,0,1),12,CURDATE(),NULL,NOW()); SET i = i + 1; END WHILE; END// DELIMITER ; CALL pro(10);
-- 创建带输出参数的存储过程 DELIMITER // DROP PROCEDURE IF EXISTS countVisitor
CREATE PROCEDURE countVisitor(OUT total INT) BEGIN SELECT MAX(euid) INTO total FROM visitor; END// DELIMITER ; -- 调用该存储过程,注意:输出参数必须是一个带@符号的变量 CALL countVisitor(@total);
SELECT @total; -- 创建带输入和输出参数的存储过程 DELIMITER // DROP PROCEDURE IF EXISTS pro3// CREATE PROCEDURE pro3(IN input INT,OUT output char(2)) BEGIN IF input%2 = 0 THEN -- 用@符号加变量名的方式定义一个变量,与declare类似 SET @v = "偶数"; ELSE SET @v = "奇数"; END IF; -- 语句体内可以执行多条sql,但必须以分号分隔 SET output = @v;
END // DELIMITER ; -- 调用该存储过程,注意:输入参数是一个值,而输出参数则必须是一个带@符号的变量 CALL pro3(1,@v); SELECT @v; -- 创建既做输入又做输出参数的存储过程 DELIMITER // DROP PROCEDURE IF EXISTS sp4 // CREATE PROCEDURE sp4(INOUT p4 INT) BEGIN IF p4 = 4 THEN SET p4 = 400; ELSE SET p4 = 500; END IF;
END//
DELIMITER ; CALL sp4(@pp);
SELECT @pp; -- 这里需要先设置一个已赋值的变量,然后再作为参数传入 SET @pp = 4; CALL sp4(@pp);
SELECT @pp; -- 去掉unique key 约束 ALTER TABLE user_auth DROP INDEX `username`; -- IF(expr1,expr2,expr3) SELECT u.id,IF(u.status = 1,"启用","禁用") AS statusStr FROM estate_user_doormach AS u; -- limit offset SELECT aub.id FROM app_user_basic AS aub ORDER BY aub.id ASC LIMIT 3 OFFSET 0; -- 不知道什么鬼 SELECT DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE())+1 DAY);
-- 级联插入表数据id
DELIMITER // DROP PROCEDURE IF EXISTS insertNode// CREATE PROCEDURE insertNode(IN input INT) BEGIN DECLARE i INT; DECLARE id INT; SET i = 0; WHILE i < input DO INSERT INTO a(va) VALUES(i); SELECT LAST_INSERT_ID() INTO id; INSERT INTO b(id,va) VALUES(id,i+10); SET i = i + 1; END WHILE; END // DELIMITER ; CALL insertNode(2);