MySQL入门第三天(上)——函数与视图
一、MySQL函数
同样的,完整的函数可以参照开源中国的手册:http://tool.oschina.net/apidocs/apidoc?api=mysql-5.1-zh
1.字符函数
CONCAT
实例:
//这里别名和关键字冲突了,实际中也要注意这个问题
\
CONCAT_WS
它至少接收三个参数,第一个是分隔符,后面是要分隔的字符:
实例:
FROMAT
用于格式化数字,例如保留几位小数(四舍五入)
实例:
LOWER UPPER
大小写转换函数
实例:
LEFT RIGHT
获取左右侧字符,需要传入要转换的字符串和获取的位数
实例:可以函数嵌套
LENGTH
实例:空格不能忽略
LTRIM RTRIM
删除前后导空格,分别表示第一个字符之前的空格和最后一个字符的空格
实例:
TRIM
删除空格或指定字符,完整方式:TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
实例:看实例即可一目了然:
REPLACE
字符替换,类似Java的字符替换,传入需要处理的字符串,要替换的旧字符(或字符串)和新字符
实例:
SUBSTRING
字符串截取,和Java基本类似,不过下标是从开始!传入需要处理的字符串,从第几位开始(1是首位),要截几位
实例:
LIKE
模式匹配,和SQL的模糊查询有相似之处
实例:
但是如果%是记录中存在的字符,和通配符%是有混淆的
比如查找名字中含有 % 的,就会存在问题(%%%是无法精确匹配的),我们可以使用转义字符,MySQL中:
ESCAPE 就是自定义转义字符(这里就告诉MySQL,1是转义字符,后面的%当做普通字符处理,与\类似)
2.数值运算符和函数
+ - * / 不再赘述
CEIL FLOOR
向上取整与向下取整,传入要处理的数值即可
实例:
DIV
整数相除
实例:
MOD
取模运算,整数或者小数均可以
实例:
POWER
幂运算,传入底数和指数
实例:
ROUND
四舍五入函数,传入需要操作的数和保留的位数
实例:
TRUNCATE
数字截断函数,不进行四四舍五入,强行截断,传入要操作的数和要截断到小数点后几位
实例:
3.比较运算符和函数
BETWEEN...AND
是一个闭区间,和前面一样,返回1表示真,0表示假
实例:(NOT相似)
IN
是否在给定的集合内
实例:
IS NULL
是否为空或非空
4.日期时间函数
NOW
打印当前日期时间
实例:
CURDATE CURTIME
当前日期与当前时间
实例:
DATE_ADD
日期的变更函数,不仅仅是增加,变更的时间参数被INTERVAL格式激活后便可以使用各种单位,传入需要变更的日期和变更的时间长度
实例:
DATEDIFF
日期差值计算函数,传入两个要计算差值的日期即可。
实例:
DATE_FORMAT
日期格式转换函数,详细的参数介绍可参见开源中国MySQL文档
5.信息函数
CONNECTION_ID
得到连接的ID,也就是线程的ID
实例:
DATABASE
得到当前打开的数据库
实例:
LAST_INSERT_ID
返回最后一次插入记录的主键(只有自增主键时生效),插入多条情况时等更多信息可以参见:http://blog.csdn.net/slvher/article/details/42298355
实例:
USER VERSION
当前用户和数据库版本信息
实例:
6.聚合函数
SQL2标准规定聚合函数将会忽略NULL值
如果字段中所有数据都为NULL,那么COUNT()返回0,其他返回NULL
当然,聚合函数也支持统计的去重操作:
COUNT(DISTINCT id)
当然,这里指出COUNT(字段)是统计字段的非NULL记录数,而COUNT(*)只是简单的统计记录数
AVG
COUNT
//有点尴尬,前面少写了一个 g 一直将错就错错到现在
MAX MIN SUM
7.加密函数
MD5
返回加密后的MD5字符串
二、自定义函数(UDF)
1.简介
创建自定义函数: 注意,函数必须有返回值,如果要无返回值的,应该创建‘存储过程’(函数返回值只能有一个,存储过程可以没有或多个(通过select),而且存储过程可以通过out为变量赋值,而函数不行)
函数的参数最好和表的字段名字不一样,如果相同的话,在使用时,应该用表名.字段名进行区分
CREATE FUNCTION 函数名(参数名1 类型1,参数名2 类型2,....)
[DEFINER = {user|CURRENT_USER}]//定义时的用户,若是不写就默认为当前用户
2.语法
注意事项:
3.创建无参函数
以改造NOW()函数为实例:(返回值可以是任意MySQL支持的数据类型)
换成非中文是正常的:(待解决 FIXME)
4.创建有参函数
5.创建复合结构函数
以用户表为例:
需求是创建一个函数,完成插入记录,并返回id值,按照之前的写法:
发现是报错的,因为MySQL认为分号 ; 是分隔符,此时命令结束,根本没有SMALLINT
这个时候我们使用 DELIMITER 重新定义分隔符,这样,语句结束就变为 // 结束语句了
需要使用Delimiter 修改MySQL的结束符,使用Begin....End将复杂函数括起来,相当于程序中的大括号{},有返回值的话,使用Return返回
函数定义:
后面记得把DELIMITER改回来
6.删除函数
更多详细的函数介绍(循环流程控制等),请参见:http://www.cnblogs.com/caoruiy/p/4485273.html
三、视图
视图是查询结果形成的虚拟表(派生表)
示例:
# 在CREATE VIEW后指定别名
CREATE VIEW REP_INFO(name,num) AS
SELECT rep_name,COUNT(*) FROM rep
可更新视图的SQL标准:
定义与介绍参见:http://www.cnblogs.com/zzwlovegfj/archive/2012/06/23/2559596.html
视图基本操作请参见:http://www.cnblogs.com/4php/p/4108157.html
两个实例参见:http://www.cnblogs.com/chenpi/p/5133648.html#_label0
MySQL入门第三天(上)——函数与视图的更多相关文章
- MySQL入门第三天(下)——存储过程与存储引擎
一.存储过程 1.简介 原始的SQL执行的流程: 通过存储过程,便可以简化以上流程,那么存储过程是什么,如何进行性能提高呢? 是什么? 存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和 ...
- jQuery入门第三
jQuery入门第三 1.HTML 2.CSS 衣服 3.javascript 可以动的人 4.DOM 编程 对html文档的节点操作 5.jQuery 对 javascript的封装 简练的语法 复 ...
- JavaMail入门第三篇 发送邮件
JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...
- Oracle入门第三天(上)——多表查询与分组函数
一.多表查询 所有的连接分析,参考之前随笔:http://www.cnblogs.com/jiangbei/p/7420136.html 1.笛卡尔积 select last_name, depart ...
- Flask入门第三天
一.数据库操作 1,orm orm(object-Relation Mapping),对象-关系映射,主要实现模型对象到关系数据库数据的映射. 优点: - 只需要面向对象编程, 不需要面向数据库编写代 ...
- java入门第三步之数据库连接
数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...
- java入门第三步之数据库连接【转】
数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...
- Android JNI入门第三篇——jni头文件分析
一. 首先写了java文件: public class HeaderFile { private native void doVoid(); native int doShort(); native ...
- CTF---Web入门第三题 这个看起来有点简单!
这个看起来有点简单!分值:10 来源: 西普学院 难度:易 参与人数:10515人 Get Flag:3441人 答题人数:4232人 解题通过率:81% 很明显.过年过节不送礼,送礼就送这个 格式: ...
随机推荐
- ZT ---- 给孩子的信(孩子写给爸爸妈妈的信在24、25、26楼)
胡同口 > 情感 > 婚后空间 > 给孩子的信(孩子写给爸爸妈妈的信在24.25.26楼) 给孩子的信(孩子写给爸爸妈妈的信在24.25.26楼)分享: 腾讯微博 新浪微博 QQ空间 ...
- 什么是Github的元数据metadata以及如何备份github上的数据
github被微软收购后,提供的工具种类是越来越多了,大大提高了我们程序员日常工作的效率. 今天我偶然发现,我们可以一键把自己整个github上的数据,不仅仅是代码,还包含每个仓库里创建的issue都 ...
- 使用jMeter构造逻辑上有依赖关系的一系列并发请求
相信前端开发工程师对CSRF(Cross-site request forgery)跨站请求伪造这个概念都非常熟悉,有的时候也简写成XSRF,是一种对网站的恶意利用. 尽管听起来像跨站脚本(XSS), ...
- UEditor 中配置可以跨域访问的图片路径
文档里很清楚:http://fex.baidu.com/ueditor/#server-path 进入配置文件 当域名不是直接配置到项目根目录时,例:http://a.com/b/c 域名下有两文件 ...
- tp5中分页携带参数的方法
$list = $model->where(...)->order(.....)->paginate($size, false, [ 'query' = ...
- Intellij IDEA Organize Imports
使用Eclipse进行开发时,我喜欢用Ctrl + Shift + O快捷键管理Java类的导入,它可以导入所需的Java类,去除不需要的Java类. Eclipse的Organize Imports ...
- 最简单的PS渐变导入方法 photoshop渐变插件素材导入教程
photoshop渐变插件素材可以让用户更好更直接,更快速地设计出自己想要的效果作品.网上有多种多样的ps渐变,那么Mac版Ps渐变怎么导入呢?这里我来和大家分享一下photoshop渐变插件素材导入 ...
- 关于mysql 出现 1264 Out of range value for column 错误的解决办法
今天给客服恢复mysql数据的时候.本来测试好的数据.但是到了客户那里却死活不干活了.老报错! INSERT INTO ka_tan4 set num='716641385999', username ...
- Linux CentOS6系统安装最新版本Node.js环境及相关文件配置
Node.js,当前应用非常广泛的Javascript运行环境,采用C++编写的,目前应用较多的用于WEB应用中,执行效率还是非常高的,虽然老左不从业程序的开发,但是有些时候在玩VPS的时候还是会遇到 ...
- 使用 PHP Curl 做数据中转
流程 收集头部信息 收集请求数据 转换头部信息为 CURL 头部请求格式 使用 Curl 进行转发 收集 HTTP 头信息 function getAllHeaders() { $headers = ...