7、自定义函数
用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同。包含了两个必要条件,参数与返回值。没有必然内在联系。
函数可以返回任意类型的值,同样可以接收这些类型的参数;
创建自定义函数:
CREATE FUNCTION function_name             #函数名
RETURNS
{STRING | INTEGER | REAL | DECIMAL}        #返回值类型
routine_body                                                 #函数体
函数体可以包含合法的SQL语句;也可以是简单的SELECT或INSERT语句;
函数体如果是复合结构则可以使用BEGIN  ... END 语句;
复合结构可以包含声明,循环,控制结构。
创建不带参数的函数
#SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日   %H点:%i分:%s秒');  #将时间显示为年月日,时分秒, 函数要实现的功能
#CREATE  FUNCTION  f1()  RETURNS  VARCHAR(30)
RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日   %H点:%i分:%s秒'); #此时使用select f1() 即可获得上面的结果
创建带参数的函数
#CREATE FUNCTION f2(num1 SMALLINT UNSIGNED, num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGED
RETURN (num1 + num2)/2;     #计算两个值的平均值
创建带多个参数的函数
CREATE FUNCTION adduser(username VARCHAR(20)) 
RETURNS INT UNSIGNED
BEGIN                                                        #由于使用了两个语句所以需要使用BEGIN 。。END语句
INSERT test(username) VALUES(username);   #将username值插入
RETURN  LAST_INSERT_ID();                         #返回插入的ID
END
//     #修改后的分隔符 如果不修改会报错,需要将默认分隔符分号修改为//或其他的符号,命令为DELIMITER //
删除函数
DROP FUNCTION [IF EXISTS] function_name;
#DROP FUNCTION f2;
8、存储过程
MySQL的执行过程:
存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理。
优点:
增强SQL语句的功能和灵活性
实现了较快的执行速度
减少了网络流量
创建存储过程:
CREATE
[DEFINER = { user | CURRENT_USER } ]                 #指向创建者
PROCEDURE sp_name ([proc_parameter [,...] ])    #带0个或多个参数
[characteristic ...] routine_body                              #特性
 
proc_parameter:     #参数的写法
[IN | OUT | INOUT ] param_name type   #IN,表示该参数的值必须在调用存储过程时指定;OUT,表示该参数的值可以被存储过程改变,并且可以返回 ; INOUT,表示该参数的调用时指定,并且可以被改变和返回。
 
特性:
characteristic 'string'
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
#COMMENT:               注释
CONTAINS SQL :            包含SQL语句,但不包含读或写数据的语句
NO SQL:                      不包含SQL语句
READS SQL DATA :        包含读数据的语句
MODIFIES SQL DATA :     包含写数据的语句
SQL SECURITY { DEFINER | INVOKER }     指明谁有权限来执行
 
过程体
过程体由合法的SQL语句构成,可以是任意(对记录的增删改查,多表的链接操作)SQL语句;
过程体如果为复合结构则使用BEGIN ... END语句;复合结构可包含声明,循环,控制结构;
 
创建没有参数的过程:
CREATE PROCEDURE sp1()  SELECT VERSION();
调用存储过程
CALL sp_name ([parameter [, ... ] ])
CALL sp_name [ ( ) ]   #带参数 小括号不可以省略
 
创建一个带有IN类型参数的过程:
CREATE PROCEDURE removeUserById (IN p_id INT UNSIGNED )  #创建过程,为删除userID
BEGIN
DELETE FROM users WHERE id = p_id;  #第一个ID是数据表的字段,第二个为过程传递的参数
END 
//      #需要将该过程分隔符修改为//
创建过程需要将字段和参数的名称分别开来,不然会认为两个均为字段,将过程传参修改为p_id
 
创建一个带有OUT类型的过程
CREATE PROCEDURE removeUserAndRetrunUserNums (IN p_id INT UNSIGNED , OUT userNums INT UNSIGNED)  #创建过程,删除user 返回userID
BEGIN
DELETE FROM users WHERE id = p_id;
SELECT count(id) FROM users INTO userNums;
END
//
调用该过程
CALL removeUserAndRetrunUserNums (24,@Nums); # @Nums 为局部变量,只在BEGIN。。END之间声明
SELECT @Nums ;
 
创建一个带有INOUT类型的过程
CREATE PROCEDURE removeUserByAgeAndRrturnInfos( IN p_age SMALLINT UNSIGNED ,OUT deleteUsers SMALLINT UNSIGNEND, OUT userCounts SMALLINT UNSIGNED)
BEGIN
DELETE FROM users WHERE age = p_age;
SELECT ROW_COUNT( ) INTO deleteUsers; # ROW_COUNT( )用来统计最近受影响的行数,结果为数值 几行
SELECT COUNT( id ) FROM users  INTO userCounts;  
END
//  #此处需要修改分隔符
CALL  removeUserByAgeAndRrturnInfos(23,@a,@b); #此处@a,@b为局部变量
存储过程与自定义函数的区别
1、存储过程实现的功能要复杂一些;而函数的针对性更强
2、存储过程可以返回多个值,函数只有一个返回值;
3、存储过程一般独立的来执行,而函数可以作为其他SQL语句的组成部分来实现。
 
 
9、存储引擎
MyISAM     
InnoDB
Memory
CSV
Archive
并发控制:当多个连接对记录进行修改时保证数据的一致性和完整性。
共享锁(读锁):同一时间段内,多个用户可以读取同一个资源,读取过程中任何数据不会发生变化。
排他锁(写锁):在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或写锁操作。
锁策略
表锁,是一种开销最小的锁策略。锁表
行锁,是一种开销最大的锁策略。锁行
事物:用于保证数据库的完整性。
外键:是保证数据一致性的策略。
索引:是对数据表中的一列或者多列的值进行排序的一种结构。
修改存储引擎的方法:
1、通过修改MySQL的配置文件实现
- default-storage-engine = engine
2、通过创建数据表的命令实现
-CREATE TABLE tbl_name( ...) ENGINE = engine  
 
10、MySQL的管理工具
PHPMyAdmin
Navicat
MySQL Workbench

菜鸟的MySQL学习笔记(五)的更多相关文章

  1. 菜鸟的MySQL学习笔记(一)

    本学习笔记是照搬慕课网<与MySQL的零距离接触>内容,特此感谢! 1-1 mysql的安装与配置 Windows环境下的MSI安装: 1.安装: 双击MSI文件->用户协议-> ...

  2. mysql学习笔记五 —— MHA

    MySQL_MHA ABB(主从复制)-->MHA(实现mysql高可用.读写分离.脚本控制vip飘逸)-->haproxy(对slave集群实现分发,负载均衡)-->keepali ...

  3. MySQL学习笔记五:数据类型

    MySQL支持多种数据类型,大致可以分为数值,日期/时间和字符类型. 数值类型 MySQL支持所有标准SQL数值数据类型,包括严格数值数据类型(INTEGER.SMALLINT.DECIMAL和NUM ...

  4. 菜鸟的MySQL学习笔记(四)

    MySQL中的运算符和函数: 1.字符函数: 2.数值运算符与函数: 3.比较运算符与函数: 4.日期时间函数: 5.信息函数: 6.聚合函数: 7.加密函数等:   6-1.字符函数: CONCAT ...

  5. 菜鸟的MySQL学习笔记(三)

    4-1插入记录INSERT INSERT [INTO] tbl_name [(col_name)] {VALUES|VALUE} ({expr|DEFAULT},...), (...), ...   ...

  6. 菜鸟的MySQL学习笔记(二)

    3-1约束: 1.约束保证数据的完整性和一致性: 2.约束分表级约束(两个或两个个以上字段的约束)和列级约束(一个字段约束): 3.NOT NULL       非空: PRIMARY KEY     ...

  7. MySql学习笔记(五) —— 存储过程

    存储过程是MySql 5支持的特性,它是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之 ...

  8. MySQL学习笔记(五):MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  9. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

随机推荐

  1. 《算法:C语言实现》阅读笔记

    //从今天起准备认真看完这本书.本渣虽然笨,但是窝懒啊.... //今天开始看第一章.希望坚持下去. 第一章 引言 通过讨论连通问题的几种算法,来引出算法的重要性. 1.1 连通问题的快速查找算法 感 ...

  2. 如何生成一副Poker

    import java.util.LinkedList;import java.util.Random;//扑克类class Poker{    String color;//花色    String ...

  3. MongoDB 的创建、查询、更新、删除

    MongoDB数据库中,创建.查询.更新.删除操作的对象是集合. 1.查看某个数据库中有哪些集合,在此之前需要使用数据库 C:\Windows\system32>mongo MongoDB sh ...

  4. android 开源项目学习<二>

    roottools:   RootTools gives Rooted developers easy access to common rooted tools...  https://code.g ...

  5. java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二)

    1.自动判断格式并调用相应的转换工具,默认方法 /** * 自动判断格式并调用相应的转换工具,默认方法 * @param srcVideoPath * @param tarVideoPath * @r ...

  6. 数据库数据导入导出系列之五 C#实现动态生成Word(转)

    1. 一个控制台例子,实现动态生成Word. 首先,添加引用:COM->Microsoft Word 11.0 Object Library. 2. 介绍几篇牛人写的关于操作Word的文章 [分 ...

  7. 在Android中访问内置SE和基于SE的卡模拟(一)

    2013-10-10 编写 前言 在“十问Android NFC手机上的卡模拟”文中仅仅简单的介绍了一下相关的概念,如果需要了解基于SE的卡模拟的更多细节,也就是,究竟在Android的NFC手机上, ...

  8. Tinder 心动效果---卡片式view左右滑动

    http://www.eoeandroid.com/thread-549316-1-1.html SlideCard.zip

  9. Kafka 0.8: 多日志文件夹机制

    kafka 0.7.2 中对log.dir的定义如下: log.dir none Specifies the root directory in which all log data is kept. ...

  10. 关于Intent的七大属性

    原谅我愚昧,Intent七大属性这个概念我也是昨天才接触到,看了一下,都是一些常用的东西,就是没有总结过,那么今天就来简单总结一下. Intent七大属性是指Intent的ComponentName. ...