版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/y5526046/article/details/51984287
函数
CREATE FUNCTION function_name(param1 varchar(255)) RETURNS varchar(100) CHARSET utf8
BEGIN
....
RETURN ...;
END
存储过程
CREATE PROCEDURE procedure_name(param1 date)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION ...;
DECLARE CONTINUE HANDLER FOR SQLWARNING ...;
....
END
存储过程-游标
CREATE PROCEDURE procedure_name()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT ...;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop : LOOP
FETCH cur INTO param1;
IF done THEN
LEAVE read_loop;
END IF;
...
END LOOP;
CLOSE cur;
END
存储过程-事务
CREATE PROCEDURE procedure_name()
BEGIN
DECLARE error_flag INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET error_flag = 1;
START TRANSACTION;
...
IF error_flag = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END
存储过程-动态语句
CREATE PROCEDURE procedure_name()
BEGIN
DECLARE sentence text;
SET sentence = 'SELECT ...';
SET @gsql = sentence;
PREPARE stmt FROM @gsql;
EXECUTE stmt;
END
事件
CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT comment]
DO ...
- ON COMPLETION [NOT] PRESERVE: 定义事件是一次执行还是永久执行,默认为一次执行,即NOT PRESERVE。
- ENABLE | DISABLE | DISABLE ON SLAVE: 定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上DISABLE ON SLAVE。
视图
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW [db_name.]view_name [(column_list)]
AS
select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
- ALGORITHM:
- UNDEFINED:MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新;
- Merge:合并的执行方式,每当执行的时候,先将我们视图的sql语句与外部查询视图的sql语句,混合在一起,最终执行;
- Temptable:临时表模式,每当查询的时候,将视图所使用的select语句生成一个结果的临时表,再在当前的临时表内进行查询;
- with check option:
- 当视图中存在where条件是起作用;
- 对于update和insert,要保证操作后,数据要被视图查询出来,否则操作失败;
- LOCAL和CASCADED关键字决定了检查测试的范围。LOCAL关键字对CHECK OPTION进行了限制,使其仅作用在定义的视图上,CASCADED会对将进行评估的基表进行检查。如果未给定任一关键字,默认值为CASCADED;
参考文章: