MySql 5.0基础知识和常用命令详细介绍
2024-07-24 12:40:29
供稿:网友
CREATE PROCEDURE 建立一个存放在MySQL数据库的表格的存储过程。 CREATE FUNCTION 建立一个用户自定义的函数,尤其是返回数据的存储过程。 ALTER PROCEDURE 更改用CREATE PROCEDURE 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。. ALTER FUNCTION 更改用CREATE FUNCTION 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。. DROP PROCEDURE 从MySQL的表格中删除一个或多个存储过程。 DROP FUNCTION 从MySQL的表格中删除一个或多个存储函数。 SHOW CREATE PROCEDURE 返回使用CREATE PROCEDURE 建立的预先指定的存储过程的文本。这一声明是SQL:2003规范的一个MySQL扩展。 SHOW CREATE FUNCTION 返回使用CREATE FUNCTION建立的预先指定的存储过程的文本。这一声明是SQL:2003规范的一个MySQL扩展。 SHOW PROCEDURE STATUS 返回一个预先指定的存储过程的特性,包括名称、类型、建立者、建立日期、以及更改日期。这一声明是SQL:2003规范的一个MySQL扩展。 SHOW FUNCTION STATUS 返回一个预先指定的存储函数的特性,包括名称、类型、建立者、建立日期、以及更改日期。这一声明是SQL:2003规范的一个MySQL扩展。 CALL 调用一个使用CREATE PROCEDURE建立的预先指定的存储过程。 BEGIN ... END 包含一组执行的多声明。 DECLARE 用于指定当地变量、环境、处理器,以及指针。 SET 用于更改当地和全局服务器变量的值。 SELECT ... INTO 用于存储显示变量的纵列。 OPEN 用于打开一个指针。 FETCH 使用特定指针来获得下一列。 CLOSE 用于关闭和打开指针。 IF 一个An if-then-else-end if 声明。 CASE ... WHEN 一个 case声明的结构 LOOP 一个简单的循环结构;可以使用LEAVE 语句来退出。 LEAVE 用于退出IF,CASE,LOOP,REPEAT以及WHILE 语句。 ITERATE 用于重新开始循环。 REPEAT 在结束时测试的循环。 WHILE 在开始时测试的循环。 RETURNS 返回一个存储过程的值。 MySQL 5.0支持存储过程语句。 一.创建存储过程 1.基本语法: create procedure sp_name() begin ......... end 2.参数传递 二.调用存储过程 1.基本语法:call sp_name() 注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递 三.删除存储过程 1.基本语法: drop procedure sp_name// 2.注意事项 (1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 四.区块,条件,循环 1.区块定义,常用 begin ...... end; 也可以给区块起别名,如: lable:begin ........... end lable; 可以用leave lable;跳出区块,执行区块以后的代码 2.条件语句 if 条件 then statement else statement end if; 3.循环语句 (1).while循环 [label:] WHILE expression DO statements END WHILE [label] ; (2).loop循环 [label:] LOOP statements END LOOP [label]; (3).repeat until循环 [label:] REPEAT statements UNTIL expression END REPEAT [label] ; 五.其他常用命令 1.show procedure status 显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等 2.show create procedure sp_name 存储过程创建语法: CREATE PROCEDURE procedure_name ([parameter[,...]) [LANGUAGE SQL] [ [NOT] DETERMINISTIC ] [{CONTAINS SQL|MODIFIES SQL DATA|READS SQL DATA|NO SQL}] [SQL SECURITY {DEFINER|INVOKER} ] [COMMENT comment_string] procedure_statements 可用SHOW PROCEDURE STATUS 或 SHOW CREATE PROCEDURE 来查看存储过程信息 另,系统表INFORMATION_SCHEMA.ROUTINES也包含了存储过程的一些信息 同样地,函数也可以使用同样方式查看(SHOW FUNCTION STATUS) 函数的创建 CREATE FUNCTION function_name (parameter[,...]) RETURNS datatype [LANGUAGE SQL] [ [NOT] DETERMINISTIC ] [ {CONTAINS SQL | NO SQL | MODIFIES SQL DATA | READS SQL DATA} ] [ SQL SECURITY {DEFINER|INVOKER} ] [ COMMENT comment_string ] 语句体 函数与存储过程基本一样,其区别主要有: 1、 要使用RETURNS指定返回类型 2、 函数必须返回值,且在语句体中使用RETURN返回(注意:指定返回类型用RETURNS,返回值用RETURN) 3、 参数不区分IN,OUT,全部为IN类形 例: CREATE FUNCTION cust_status(in_status CHAR(1)) RETURNS VARCHAR(20) BEGIN DECLARE long_status VARCHAR(20); IF in_status="O" THEN SET long_status="Overdue"; ELSEIF in_status="U" THEN SET long_status="Up to date"; ELSEIF in_status="N" THEN SET long_status="new"; END IF; RETURN(long_status); END; 调用: SELECT cust_status('O'); 触发器 CREATE [DEFINER={user|CURRENT_USER}] TRIGGER trigger_name {BEFORE|AFTER} {UPDATE|INSERT|DELETE} ON table_name FOR EACH ROW trigger_statements 意义:当对表table_name执行update,insert,delete操作之前(before)或之后(after)时触发语句trigger_statements操作 例: mysql> CREATE TRIGGER account_balance_au AFTER UPDATE ON account_balance FOR EACH ROW BEGIN DECLARE dummy INT; IF NEW.balance<0 THEN SET NEW.balance=NULL; END IF; END 上述触发器表示:当更新表account_balance之后,如果更新的值balance小于0,则将它改为NULL, 注:如果为OLD.balance则表示更新前的原值