mysql函数

MySQL 字符串拼接

纵饮孤独 提交于 2020-01-01 00:10:07
在Mysql 数据库中存在两种字符串连接操作.具体操作如下 一. 语法: 1. CONCAT(string1,string2,…) 说明 : string1,string2代表字符串,concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL 例1: 例2: 2. CONCAT_WS(separator,str1,str2,...) 说明 : string1,string2代表字符串,concat_ws 代表 concat with separator,第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。 举例1: mysql> select concat_ws('#','dbdh=','NorthEastTrcoon',null) AS dbdh_name_three; +-----------------------+ | dbdh_name_three | +-----------------------+ | dbdh=#NorthEastTrcoon | +-----------------------+ 1 row in set (0.00 sec) 例2: mysql> select concat_ws

Mysql中的JSON系列操作函数

╄→尐↘猪︶ㄣ 提交于 2020-01-01 00:08:00
前言 JSON是一种轻量级的数据交换格式,采用了独立于语言的文本格式,类似XML,但是比XML简单,易读并且易编写。对机器来说易于解析和生成,并且会减少网络带宽的传输。 JSON的格式非常简单: 名称/键值 。之前MySQL版本里面要实现这样的存储,要么用VARCHAR要么用TEXT大文本。 MySQL5.7发布后,专门设计了JSON数据类型以及关于这种类型的检索以及其他函数解析。 下面一起来实际操作一下。 创建带有 JSON 字段的表 比如一个‘文章'表,字段包括 id、标题 title、标签 tags 一篇文章会有多个标签,tags 就可以设为 JSON 类型 建表语句如下: ? 1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE `article` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `title` varchar (200) NOT NULL , `tags` json DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE=InnoDB; 插入数据 插入一条带有 JSON 内容的数据,执行 insert 语句: ? 1 2 3 4 5 6 7 8 9 INSERT INTO `article` (`title`, `tags`) VALUES (

MySQL JSON 类型数据操作

孤街浪徒 提交于 2020-01-01 00:07:37
1、Java 中动态扩展字段,会导致数据库表被锁,在MySQL 5.7.8版本之前,因为MySQL不能直接操作JSON类型数据,可以将一个字段设定成varchar类型,里面存放JSON格式数据,这样在需要扩展字段时,不需要修改表结构; 2、mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的优点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据时,还是比较别扭的。 创建JSON 类似 varchar,设置 JSON 主要将字段的 type 是 json, 不能设置长度,可以是 NULL 但不能有默认值 CREATE TABLE muscleape ( id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, category JSON, tags JSON, PRIMARY KEY (id) ); DESC muscleape; Field type Null Key Default Extra id tinyint(3) unsigned NO PRI auto_increment category json YES "" "" tags json YES "" "" 插如JSON数据 1、插入 json 格式的 字符串 ,可以是对象的形式,也可以是数组的形式

存储过程

匆匆过客 提交于 2019-12-31 05:43:24
存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。 --------------------基本语法-------------------- 一 . 创建存储过程 create procedure sp_name() begin ......... end 二 . 调用存储过程 1.基本语法:call sp_name() 注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递 三 . 删除存储过程 1.基本语法: drop procedure sp_name// 2.注意事项 (1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 四 . 其他常用命令 1.show procedure status 显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等 2.show create procedure sp_name 显示某一个mysql存储过程的详细信息 --------------------数据类型及运算符-------------------- 一、基本数据类型: 略 二、变量: 自定义变量:DECLARE a INT ; SET a=100; 可用以下语句代替:DECLARE a INT DEFAULT 100; 变量分为 用户变量 和 系统变量 ,系统变量又分为会话和全局级变量 用户变量

MySQL FORMAT函数简介

时间秒杀一切 提交于 2019-12-30 13:11:10
MySQL FORMAT函数简介 有时,您使用表达式或 聚合函数 (如 AVG )来计算数据库中的值,例如库存周转率,产品的平均价格,平均发票值等。 表达式的结果是 十进制数 ,并带有许多小数位。要格式化这些数字,您可以使用具有以下语法的 FORMAT 函数: FOMRAT ( N , D , locale ) ; SQL FORMAT 函数将数字N格式化为格式,如 "#,###,###.##" ,舍入到 D 位小数。它返回一个值作为字符串。 FORMAT 函数接受三个参数: N 是要格式化的数字。 D 是要舍入的小数位数。 locale 是一个可选参数,用于确定千个分隔符和分隔符之间的分组。如果省略 locale 操作符,MySQL将默认使用 en_US 。 MySQL FORMAT函数示例 请参阅使用 FORMAT 函数的示例 - mysql > SELECT FORMAT ( 14500.2018 , 2 ) ; + -----------------------+ | FORMAT ( 14500.2018 , 2 ) | + -----------------------+ | 14 , 500.20 | + -----------------------+ 1 row in set SQL 以下语句使用 FORMAT 函数,第二个参数为 0 ,因此,结果没有任何小数位。

MySQL使用技巧(持续更新)

本小妞迷上赌 提交于 2019-12-30 11:13:41
1. 将只有一列的结果集转换为一行 使用mysql的GROUP_CONCAT()函数,默认以逗号进行分割,可以使用SEPARATOR 关键字切换分隔符 示例如下 当前sql查询结果为一列值,加上GROUP_CONCAT()函数之后,可以将列转行 使用+号分割 2.在mysql中使用类似java的switch结构 可以使用case when then end结构来实现 示例如下: 原sql结果 使用case结构之后 并且,在case结构中的when语句下,是可以继续写列名的,比如 来源: CSDN 作者: 有错误先debug 链接: https://blog.csdn.net/qq_42561919/article/details/103762576

mysql自定函数

不想你离开。 提交于 2019-12-30 00:09:22
一、基本语法   delimiter 自定义符号   -- 如果函数体只有一条语句, begin和end可以省略, 同时delimiter也可以省略   create function 函数名(形参列表) returns 返回类型   -- 注意是retruns   begin     函数体    -- 函数内定义的变量如:set @x = 1; 变量x为全局变量,在函数外面也可以使用     返回值   end   自定义符号   delimiter ; 二、示例 -- 自定义函数 delimiter $$ create function myfun3(ia int, ib int) returns int begin return ia + ib; end $$ delimiter ; 三、查看函数   1. show function status [like 'pattern'];  -- 查看所有自定义函数, 自定义函数只能在本数据库使用。   2. show create function 函数名;  -- 查看函数创建语句 四、删除函数   drop function 函数名; 五、综合应用 1. 使用全局变量 -- 计算1 ~ 指定数据之间的和 delimiter $$ create function my_sum(x int) returns int begin

INSERT 中ON DUPLICATE KEY UPDATE的使用

半腔热情 提交于 2019-12-29 23:52:48
使用场景,在做全国各省ip访问统计时要将sparkStreaming的数据存在mysql中,按照一般设计,id,province,counts,time,这样就需要每次清空表,但是如果多分区的话就存在删除表的时候回出现后一个分区可能把前一个分区的数据删除掉,当然最好的办法是每次都只更新而不删除,但是如果通过代码实现比较复杂. 此时我们需要的就是如果存在则更新,如果不存在则新增. 用redis的kv就可以很容易的实现.在MySQL中也有这样的功能.INSERT 中ON DUPLICATE KEY UPDATE 但是这个在在使用的时候需要把省份设置成key ,unique key .这也是根据业务场景设计表的实践 INSERT 中ON DUPLICATE KEY UPDATE的使用(本文重点) 如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个 UNIQUE索引或PRIMARY KEY 中出现重复值,则执行旧行UPDATE。例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果: Sql代码 mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; mysql> UPDATE table SET c=c+1 WHERE a=1;

MAC安装mysql8.0.11以及修改root密码

早过忘川 提交于 2019-12-29 05:45:54
1、安装 官网下载地址: https://dev.mysql.com/downloads/mysql/ 我选择安装的是macOS 10.13 64位的DMG包安装 2、启动mysql 打开系统偏好设置,会看到安装好的mysql 双击进入mysql启动 终端启停mysql 启动MySQL服务 sudo /usr/local/MySQL/support-files/mysql.server start 停止MySQL服务 sudo /usr/local/mysql/support-files/mysql.server stop 重启MySQL服务 sudo /usr/local/mysql/support-files/mysql.server restart 3、登陆mysql 刚安装完后终端登陆mysql mysql -uroot -p 问题出现了 MYSQL会要求输入一个默认密码,但当自己在终端上使用默认密码登录的时候,总会提示一个授权失败的错误:Access denied for user ‘root’@’localhost’ (using passwor) 问题解决: 这是因为没有给root角色设置密码; 1. 打开终端停止mysql sudo /usr/local/mysql/support-files/mysql.server stop 2.

Mysql中的存储过程

偶尔善良 提交于 2019-12-28 19:55:41
什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法; ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用; 有哪些特性 有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能; 函数的普遍特性:模块化,封装,代码复用; 速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤; 创建一个简单的存储过程 存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum; 几点说明: DELIMITER ;;:之前说过了,把默认的输入的结束符;替换成;;。 DEFINER:创建者; -- ---------------------------- -- Procedure structure for `proc_adder` -- ---------------------------- DROP PROCEDURE IF EXISTS `proc_adder`; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE