都学完一些了, 发现mysql不适合用存储过程. 他每次执行都要编译, 从学习到放弃...
-- SELECT VERSION() //查看mysql版本
-- 1.创建一个无参数存储过程 注意 ,下面的 //不是注释符. 是自定义 存储sql的结束符. 就是END后面用啥结束, 默认 ;分号, 但在存储过程中, 使用存储过程会报错
DELIMITER //
CREATE PROCEDURE t1()
BEGIN
SELECT * FROM tb_user;
END//
DELIMITER ;
-- 调用存储过程
CALL t1()
-- 说明:
-- DELIMITER: 该关键字用来声明MYSQL的结尾用什么结束符. 默认是 ; 分号
-- 写存储过程为啥要改MYSQL默认的 结束符号呢?
-- 因为当MYSQL只要遇到 ;分号, 就会立即执行,
-- 例如: DELIMITER /, 那么END结尾就用/.
-- DELIMITER $, END$
-- DELIMITER \, END\ 这些都可以. 这样就避免在SQL存储过程结束后, 在使用 ";"分号
-- CREATE PROCEDURE t1() 声明一个 存储过程名称为 t1的 存储过程 CREATE PROCEDURE固定写法
-- CREATE PROCEDURE t1( in username, in age) 声明一个带参数的存储过程
-- BEGIN END存储过程开始和结束符号:
BEGIN END可以嵌套使用.
例如:
BEGIN
-- a业务
BEGIN
END;
-- b业务
BEGIN
END;
END//
所以, 要说一下, DELIMITER定义的 结束符, 是最外层 END后面使用的
而存储过程最后一句, 又出现了 "DELIMITER ;" 啥意思呢?
还是自定义, 把你上面自定义的 结束符, 又给改回 分号了
-- MYSQL 存储过程参数, 分以下三类
-- in 仅用于传入参数用
-- out 仅用于返回值用
-- inout 既可以传入又可以当作返回值