mysql5.x存储过程和函数(尤其是)特性,创建方式更改,差不多是为了排除分号影响(个人笔记,仅供自己参考)
详见changes:http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html
CREATE PROCEDURE and CREATE FUNCTION Syntax:
CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter[,...]]) RETURNS type [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type func_parameter: param_name type type: Any valid MySQL data type characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } routine_body: Valid SQL routine statement
Official Demo1:
mysql> delimiter // mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) -> BEGIN -> SELECT COUNT(*) INTO param1 FROM t; -> END// Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> CALL simpleproc(@a); Query OK, 0 rows affected (0.00 sec) mysql> SELECT @a; +------+ | @a | +------+ | 3 | +------+ 1 row in set (0.00 sec)
Official Demo2:
mysql> CREATE FUNCTION hello (s CHAR(20)) mysql> RETURNS CHAR(50) DETERMINISTIC -> RETURN CONCAT('Hello, ',s,'!'); Query OK, 0 rows affected (0.00 sec) mysql> SELECT hello('world'); +----------------+ | hello('world') | +----------------+ | Hello, world! | +----------------+ 1 row in set (0.00 sec)
User Demo1:
An example using varchar and character sets delimiter // CREATE FUNCTION db.fnfullname ( id smallint(5) unsigned ) RETURNS varchar(160) CHARACTER SET utf8 COMMENT 'Returns the full name of person in db.people table referenced by id where FirstName and FamilyName are not null but MiddleName may be null' DETERMINISTIC READS SQL DATA BEGIN DECLARE fulname varchar(160) CHARACTER SET utf8; SELECT CONCAT_WS(' ', db.people.FirstName, db.people.MiddleName, db.people.FamilyName) into fulname from db.people where db.people.id=id; RETURN fulname; END // delimiter ;
User Demo2:
Sample for Procedure with insert to trace error logs DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `add_error_log`( `error_level` int(11), `error_level_name` varchar(512), `error_message` longtext, `error_file` text, `error_line` int(11), `error_context` longtext, `error_query_string` longtext, `error_time` text , `user_id` int(11), `post_data` longtext, `user_msg` text) BEGIN INSERT INTO tbl_error_log(error_level, error_level_name, error_message, error_file,error_line, error_context,error_query_string,error_time, user_id, post_data, user_msg) values(error_level, error_level_name, error_message, error_file,error_line, error_context,error_query_string, error_time, user_id, post_data, user_msg); END$$
User Demo3:
I didn't find a lot of examples for MySQL Stored Procs so I thought I'd add one. This one uses a temp table and iterates through the rows. It was a pain in the butt to debug in phpMyAdmin. There was a lot of dropping and re-creating. ############################ delimiter $$ create procedure assignKeywords( currCID int ) begin declare currKeywordID int; declare currTitle varchar(255); declare currKeyword varchar(255); declare currContent text; declare keywordsCSV varchar(255); -- get content select id, title, content from content where id = currCID into currCID, currTitle, currContent; -- create the keywords temp table to iterate drop temporary table if exists keywords_temp; create temporary table keywords_temp as select id, display_val from vars where name = 'KEYWORDS' order by display_order desc; set keywordsCSV = ","; while (select count(*) from keywords_temp) > 0 do select id, display_val from keywords_temp limit 1 into currKeywordID, currKeyword; -- search the content for current keyword if instr(currContent,currKeyword) > 0 || instr(currTitle,currKeyword) > 0 then set keywordsCSV = CONCAT(keywordsCSV, currKeywordID); set keywordsCSV = CONCAT(keywordsCSV, ","); end if; delete from keywords_temp where id = currKeywordID; end while; drop temporary table if exists keywords_temp; update content set keywords = keywordsCSV where id = currCID; end; ###############################
User Demo4:
CREATE TABLE IF NOT EXIST Osob ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (P_Id) ); CREATE TABLE uzytkownicy2 ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id), FOREIGN KEY (P_Id) References Osob(P_Id) ); ----------------------------------- INSERT INTO `osob`(`O_Id`, `OrderNo`, `P_Id`) VALUES (1,2,3) INSERT INTO `uzytkownicy2`(`O_Id`, `OrderNo`, `P_Id`) VALUES (1,2,3) ----------------------------------- DELIMITER $$ CREATE PROCEDURE wam2(OUT param1 INT) BEGIN SELECT COUNT(*) INTO param1 FROM trenowanie_mysql.osob; END$$ DELIMITER ; ------------------------------------ CALL wam2(@a);
相关推荐
5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. ...
5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. ...
5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. ...
5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1....
5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 ...
5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. ...
5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. ...
5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. ...
14.1.2 参数处理 14.1.3 返回值和出错处理 14.1.4 编译并安装用户定义函数 14.2 增加一个新的原生(native)函数 15 为MySQL增加新过程 15.1 analyse过程 15.2 编写一个过程 ...
慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 ...
它可以与任何3.21或以上版本的MySQL一起工作,并支持大部分的MySQL最新功能,包括触发器、存储过程、函数、事件、视图、管理用户,等等。它不仅对专业开发人员来说是非常尖端的技术,而且对于新手来说也易学易用。其...
安装和升级数据库,mysql安全,备份和恢复,字符集排序规则 ,sql语句语法。INnoDb存储引擎、 mysql数据字典、替代存储引擎,分布。mysql性能模式。连接器和api,sql模式指标 状态变量指标。系统变量指标。事务的...
mysql的日期和时间函数 这里是一个使用日期函数的例子。下面的查询选择所有 date_col 值在最后 30 天内的记录。 mysql> SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) ...
5.4.4 存储过程和触发器 5.4.5 外键(Foreign Keys) 5.4.5.1 不使用外键的理由 5.4.6 视图(Views) 5.4.7 '--'作为一个 注解的开始 5.5 MySQL 遵循什么标准? 5.6 怎样处理没有提交/回卷...
+ 5.4.4 存储过程和触发器 + 5.4.5 外键(Foreign Keys) # 5.4.5.1 不使用外键的理由 + 5.4.6 视图(Views) + 5.4.7 '--'作为一个 注解的开始 o 5.5 MySQL 遵循什么标准? o 5.6 怎样处理没有提交/回卷(COMMIT ...
可以对属性列、数据表、视图、存储过程和存储函数授权 10.MySQL成功安装后,在系统中默认建立的用户个数是 ______。 A.0 B.1 C.2 D.3 11.数据库管理系统提供的数据控制功能包括 ______。 计算机二级mysql数据库程序...
请先安装MySQL,并进行测试连接,exe文件可用于win8/10 x64 注意exe除非环境和我一样,否则 不能运行的,我的设置是host = '127.0.0.1',user='root',passwd='A089363b' 注意还是自己从源码修改然后用pyinstaller...
本文实例讲述了MySQL自定义函数用法。分享给大家供大家参考,具体如下: 先来一个简单的,创建一个函数将’2009-06-23 00:00:00’这样格式的datetime时间转化为’2009年6月23日0时0分0秒’这样的格式: DELIMITER $...