自定义SQL函数(UDF)

创建自定义函数

CREATE FUNCTION function_name
RETURNS
routime_body{#函数体
#可以带有(任意类型)多个参数、一个返回值
#参数数量理论上不能超过1024
#函数体由合法SQL语句构成
#也可以是简单的select/insert语句
#如果是符合结构请用BEGIN...END
#符合结构可以包含声明,循环,控制结构
}

实践

mysql -uroot -proot

Set names utf8

Create database test

Use test

Select now()

select DATE_FORMAT(NOW(),'%Y年%m月%d日 %H时%i分%s秒');

#封装上面为自定义函数

set names utf8;

#创建 不带参数 函数

CREATE FUNCTION formatDay()   RETURNS VARCHAR(30) #返回参数类型  RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H时%i分%s秒'); #返回值

#创建 带参数 函数

CREATE FUNCTION f2 (num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)  RETURNS FLOAT(10,2) UNSIGNED  RETURN (num1+num2)/2;

#创建 复合结构 函数

DELIMITER // #更改结束符  CREATE FUNCTION adduser(uname VARCHAR(20))  RETURNS INT UNSIGNED  <strong>BEGIN</strong>  INSERT test(uname) VALUES(uname);  RETURN LAST_INSERT_ID();  <strong>END</strong>  //

#调用函数

select formatDay();

#删除函数

drop function formatDay;

存储过程

Sql命令执行过程

存储过程是什么?

存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理,允许输入类型参数,输出类型参数并可以存在多个参数值

优点:

增强sql语句功能和灵活性

实现较快的执行速度

较少网络流量

创建存储过程

CREATE

[DEFINER = user_name] #创建用户

PROCEDURE sp_name([param(IN | OUT | INOUT)])

routine_body{

l 多个参数,多个返回值

l 过程体只可操作CRUD

l 如果是符合结构请用BEGIN...END

l 符合结构可以包含声明,循环,控制结构

}

实践

#创建 不带参数 存储过程

CREATE PROCEDURE SP1() SELECT VERSION();

#创建 带IN参数 存储过程

DELIMITER //  CREATE PROCEDURE removeUserByid(IN test_id INT UNSIGNED)  BEGIN  DELETE FROM test WHERE id= test_id; #参数名不能与字段名重复(否则全删)  END  //

#创建 带IN&OUT参数 存储过程

DELIMITER // #不可加分号,否则就得//;才算结束  CREATE PROCEDURE removeUserandReturnUserNum(IN uid INT UNSIGNED,OUT unum INT UNSIGNED)  BEGIN  DELETE FROM test where id=uid;  SELECT COUNT(id) FROM test INTO unum;  END  //  CALL removeUserandReturnUserNum(1,@nums);  SELECT @nums;

#创建 带多个OUT参数 存储过程

DELIMITER //  CREATE PROCEDURE removeUserByIdandReturnUserNumandDeleteNums(IN uid INT UNSIGNED,OUT unum INT UNSIGNED,OUT dnum INT UNSIGNED)  BEGIN  DELETE FROM test WHERE id=uid;  SELECT ROW_COUNT() INTO dnum;  SELECT COUNT(id) FROM test INTO unum;  END  //

CALL removeUserByIdandReturnUserNumandDeleteNums(2,@unum,@dnum);

SELECT @unum,@dnum;

#修改存储过程

#只能修改注释,参数类型。。。不能修改过程体

ALTER PROCEDURE sp_name[]

COMMENT ‘string’

#调用存储过程

CALL sp1();

CALL removeUserandReturnUserNum(1,@nums);

SELECT @nums;

#删除存储过程

DROP PROCEDURE [IF EXISTS] sp_name

存储引擎

-Mysql以不同的技术存储在文件(内存)中,这种技术成为存储引擎

并发控制

-当多个链接对记录进行修改时保证数据的一致性和完整性

这里用到锁

-共享锁(读锁):在一段时间内,多个用户可以读取同一资源,读取过程中数据不会发生任何变化。

-排它锁(写锁):在任何时间只能有一个用户写入资源,当进行写锁时阻塞其他读锁或者写锁操作

加锁只加对的,不加大的

加锁策略——锁颗粒

-表锁,开销最小的锁策略——用户对表操作时,拥有写锁策略

-行锁,开销最大的锁策略——每条记录都上写锁

事务

- 事务用于保证数据库的完整性

ACID原一隔

外键

-保持数据一致性的一种策略

索引

-对数据表中一列多列的值进行排序的一种结构

各种存储引擎特点

使用策略

MyISAM:适用于事务处理不多的情况。

InnoDB:使用事务处理多,且需要外键支持的情况

设置存储引擎

1.

Mysql.ini

-default-storage-engine=InnoDB

2.

CREATE TABLE `test` (

`id` int(30) NOT NULL AUTO_INCREMENT,

`username` varchar(30) NOT NULL,

`age` int(5) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

3.

ALTER TABLE tp1 ENGINE = MyISAM;

转载于:https://blog.51cto.com/minabo/1719886

MySQL重要但容易被忽略_MySQL自定义函数存储过程相关推荐

  1. mysql函数保留小数_MySql自定义函数-关于保留小数位的特殊需求

    背景 昨天,关于价格详情接口又来了一个小需求,而且有点特别.价格显示:改为保留两位小数,没错,就是保留两位小数.大家是不是想说这没啥特别的...数据库都有函数搞定了.例如四舍五入的ROUND(x,d) ...

  2. mysql 定一个函数_mysql自定义函数

    mysql中的UDF(自定义函数),其实是个好东西,比如可以写好一些方法或 函数,然后进行调用,而且是在SQL语句中可以进行调用. DROP FUNCTION CalculateAmount CREA ...

  3. mysql 自定义函数教程_MySQL自定义函数

    MySQL自定义函数 函数与存储过程类似,也是一组预先编译好的SQL语句的集合,但是存储过程可以有0个或多个返回,函数就只能有一个返回 创建函数 #语法 参数列表包含两部分 参数名和参数类型 #函数体 ...

  4. mysql 事件 函数_MySQL 自定义函数和存储过程的使用

    MySQL支持自定义函数和存储过程,创建函数和存储过程分别使用CREATE PROCEDURE和CREATE FUNCTION,两者在语法结构上比较相似,但是它们的使用方法及使用场景有所有不同. 1. ...

  5. mysql动态函数库_mysql自定义函数与动态查询

    介绍下mysql自定义函数的例子,以及插入单引号的方法,动态执行查询与字符串拼接的相关内容. 1.mysql自定义函数的例子 mysql不能像oracle 一样写 动态SQL. 代码示例: DROP ...

  6. rds支持mysql自带函数吗_MySQL自定义函数(CREATE FUNCTION)

    在使用MySQL的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数.自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和过程式 ...

  7. mysql 自定义函数教程_Mysql 自定义函数

    Mysql 自定义函数怎么用 CREATE FUNCTION `strip_tags`($str text) RETURNS text BEGIN DECLARE $start, $end INT D ...

  8. mysql 怎么将0女1男_MySQL自定义函数(0显示为女1显示为男

    MySQL自定义函数用法详解 自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL. 所 ...

  9. mysql支持自定义函数_MySQL 自定义函数

    自定义函数概念 用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径, 其用法与内置函数相同. 自定义函数的两个必要条件: 参数 返回值 (只能有一个) ...

  10. mysql 自定义函数报错_Mysql自定义函数报错解决方法

    [最近研究mysql数据库性能的相关问题,为了对比不同版本之间的差别.笔者找了一台测试服务器升级了该服务器的mysql数据库进行测试,在升级mysql过程中遇到了一些问题并将其 1.在MySql中创建 ...

最新文章

  1. 成功解决TypeError: __init__() got an unexpected keyword argument 'indices'
  2. postmessage与sendmessage的区别
  3. ajax跨域请求Flask后台
  4. codeforces773 D. Perishable Roads(思维+最短路)
  5. oracle如何自定义类型,Oracle 自定义类型
  6. CANOpen同步报文
  7. Spring——IOC(控制反转)
  8. javabean实体类对象转为Map类型对象的方法
  9. linux lsattr命令: 显示文件属性
  10. Tomcat 配置https证书
  11. python求数组的所有组合_使用numpy构建两个数组的所有组合的数组
  12. php framework interop group,PHP超全局变量 - 山鹰sniper的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. 封装0805跟0603有什么区别,只存在大小的区别么???
  14. matlab在投资中的应用,实验三 MATLAB在投资组合中的应用(答案)
  15. chromebook 笔记本 TrueNas 设置 wifi 连网
  16. PWM脉冲宽度调制——它是什么?
  17. Luminati怎么玩,为用户解决什么问题?
  18. 【计算机毕业设计】248高校奖学金管理系统
  19. 前端报错Unknown custom element
  20. php空间 景安,景安提供1G免费一年的PHP和ASP空间

热门文章

  1. 定时器和promise_如何讲清楚Promise?
  2. vs2015 ef 连接mysql_VS2015 + EF6连接MYSQL
  3. python爬小说收费章节_python 多线程爬小说返回章节乱套。求解
  4. mysql做一个邮箱_php+mysql 做一个注册页面 注册成功后给用户邮箱发一份确认邮件,发送邮件的代码怎么加到下面的代码里了...
  5. vuejs对象更新渲染_vue 对对象的属性进行修改时,不能渲染页面 vue.$set()
  6. tomcat体系结构
  7. 新颖训练方法——用迭代投影算法训练神经网络
  8. 【C语言】一些面试题。
  9. 货币转换函数:CURRENCY_CONVERTING_FACTOR
  10. How Touch Screen Monitors Work