MySQL重要但容易被忽略_MySQL自定义函数存储过程
自定义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自定义函数存储过程相关推荐
- mysql函数保留小数_MySql自定义函数-关于保留小数位的特殊需求
背景 昨天,关于价格详情接口又来了一个小需求,而且有点特别.价格显示:改为保留两位小数,没错,就是保留两位小数.大家是不是想说这没啥特别的...数据库都有函数搞定了.例如四舍五入的ROUND(x,d) ...
- mysql 定一个函数_mysql自定义函数
mysql中的UDF(自定义函数),其实是个好东西,比如可以写好一些方法或 函数,然后进行调用,而且是在SQL语句中可以进行调用. DROP FUNCTION CalculateAmount CREA ...
- mysql 自定义函数教程_MySQL自定义函数
MySQL自定义函数 函数与存储过程类似,也是一组预先编译好的SQL语句的集合,但是存储过程可以有0个或多个返回,函数就只能有一个返回 创建函数 #语法 参数列表包含两部分 参数名和参数类型 #函数体 ...
- mysql 事件 函数_MySQL 自定义函数和存储过程的使用
MySQL支持自定义函数和存储过程,创建函数和存储过程分别使用CREATE PROCEDURE和CREATE FUNCTION,两者在语法结构上比较相似,但是它们的使用方法及使用场景有所有不同. 1. ...
- mysql动态函数库_mysql自定义函数与动态查询
介绍下mysql自定义函数的例子,以及插入单引号的方法,动态执行查询与字符串拼接的相关内容. 1.mysql自定义函数的例子 mysql不能像oracle 一样写 动态SQL. 代码示例: DROP ...
- rds支持mysql自带函数吗_MySQL自定义函数(CREATE FUNCTION)
在使用MySQL的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数.自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和过程式 ...
- mysql 自定义函数教程_Mysql 自定义函数
Mysql 自定义函数怎么用 CREATE FUNCTION `strip_tags`($str text) RETURNS text BEGIN DECLARE $start, $end INT D ...
- mysql 怎么将0女1男_MySQL自定义函数(0显示为女1显示为男
MySQL自定义函数用法详解 自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL. 所 ...
- mysql支持自定义函数_MySQL 自定义函数
自定义函数概念 用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径, 其用法与内置函数相同. 自定义函数的两个必要条件: 参数 返回值 (只能有一个) ...
- mysql 自定义函数报错_Mysql自定义函数报错解决方法
[最近研究mysql数据库性能的相关问题,为了对比不同版本之间的差别.笔者找了一台测试服务器升级了该服务器的mysql数据库进行测试,在升级mysql过程中遇到了一些问题并将其 1.在MySql中创建 ...
最新文章
- 成功解决TypeError: __init__() got an unexpected keyword argument 'indices'
- postmessage与sendmessage的区别
- ajax跨域请求Flask后台
- codeforces773 D. Perishable Roads(思维+最短路)
- oracle如何自定义类型,Oracle 自定义类型
- CANOpen同步报文
- Spring——IOC(控制反转)
- javabean实体类对象转为Map类型对象的方法
- linux lsattr命令: 显示文件属性
- Tomcat 配置https证书
- python求数组的所有组合_使用numpy构建两个数组的所有组合的数组
- php framework interop group,PHP超全局变量 - 山鹰sniper的个人空间 - OSCHINA - 中文开源技术交流社区...
- 封装0805跟0603有什么区别,只存在大小的区别么???
- matlab在投资中的应用,实验三 MATLAB在投资组合中的应用(答案)
- chromebook 笔记本 TrueNas 设置 wifi 连网
- PWM脉冲宽度调制——它是什么?
- Luminati怎么玩,为用户解决什么问题?
- 【计算机毕业设计】248高校奖学金管理系统
- 前端报错Unknown custom element
- php空间 景安,景安提供1G免费一年的PHP和ASP空间
热门文章
- 定时器和promise_如何讲清楚Promise?
- vs2015 ef 连接mysql_VS2015 + EF6连接MYSQL
- python爬小说收费章节_python 多线程爬小说返回章节乱套。求解
- mysql做一个邮箱_php+mysql 做一个注册页面 注册成功后给用户邮箱发一份确认邮件,发送邮件的代码怎么加到下面的代码里了...
- vuejs对象更新渲染_vue 对对象的属性进行修改时,不能渲染页面 vue.$set()
- tomcat体系结构
- 新颖训练方法——用迭代投影算法训练神经网络
- 【C语言】一些面试题。
- 货币转换函数:CURRENCY_CONVERTING_FACTOR
- How Touch Screen Monitors Work