MySQL数据库常用操作技巧总结

本文实例总结了MySQL数据库常用操作技巧。分享给大家供大家参考,具体如下:

一、查询不同表中同名字段(表连接查询条件神器)

use information_schema;
select * from columns where column_name='字段名';

二、查询记录总数

SELECT SQL_CALC_FOUND_ROWS * FROM TABLE WHERE 1=1;

即可得出总数据行数

SET @RowCount=found_rows();

三、存储过程数据查询分页

预定义变量:

/*错误代码*/
SET @RetCode='1';
/*错误提示*/
SET @RetVal='1';
/*返回记录行数*/
SET @RowCount='0';
/*页码*/
SET @PageCount='0';
/*每页显示数*/
SET @CurrentItem=0;
/*每页显示数*/
SET @PageSize=arg_page_size;
/*页码*/
SET @PageCurrent=arg_page_current;
SET @SqlExe='select * from table where 1=1';
入参:arg_page_size int,arg_page_current int
IF(@PageCurrent IS NOT NULL && @PageSize IS NOT NULL) THEN
SET @CurrentItem = (@PageCurrent-1)*@PageSize;
SET @SqlExe=CONCAT(@SqlExe,'LIMIT ', @PageSize,' OFFSET ', @CurrentItem);
ELSE
SET @SqlExe=CONCAT(@SqlExe,' ');
END IF;
prepare stmt from @SqlExe;
execute stmt;
deallocate prepare stmt;
IF(@RowCount IS NOT NULL && @RowCount != 0) THEN
IF(@PageSize is null)then
SET @PageSize= @RowCount;
END IF;
SET @PageCount = ceiling(@RowCount/@PageSize);
ELSE
SET @RowCount = 0;
SET @PageCount = 1;
END IF;

四、字符串相关操作

1、从左开始截取字符串

left(str, length)

说明:left(被截取字段,截取长度)

例:

select left(content,200)as abstract from my_content_t

2、从右开始截取字符串

right(str, length)

说明:right(被截取字段,截取长度)

例:

select right(content,200)as abstract from my_content_t

3、截取字符串

substring(str, pos)

substring(str, pos, length)

说明:

substring(被截取字段,从第几位开始截取)

substring(被截取字段,从第几位开始截取,截取长度)

例:

select substring(content,5)as abstract from my_content_t
select substring(content,5,200)as abstract from my_content_t

(注:如果位数是负数 如-5则是从后倒数位数,到字符串结束或截取的长度)

4、按关键字截取字符串

substring_index(str,delim,count)

说明:substring_index(被截取字段,关键字,关键字出现的次数)

例:

select substring_index("blog.csdn.net",".",2)as abstract from my_content_t

结果:

blog.csdn

(注:如果关键字出现的次数是负数 如-2 则是从后倒数,到字符串结束)

函数简介:

SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)

不带有len 参数的格式从字符串str返回一个子字符串,起始于位置pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置pos。 使用FROM的格式为标准SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos字符,而不是字符串的开头位置。在以下格式的函数中可以对pos使用一个负值。

MySQL字符串大小写转换

deMySQL 字符串大小写转化函数有两对: lower(), uppper()lcase(), ucase()

mysql>select lower('DDD');
结果:ddd
mysql> select upper('ddd');
结果:DDD
mysql> select lcase('DDD');
结果:ddd
mysql> select ucase('ddd');
结果:DDD

通常情况下,我选择 lower(), upper() 来转换字符串大小写,因为这和其他数据库中函数相兼容。

五、时间获取相关操作

declare _LastWeekStartTime date; -- 上周开始时间
declare _LastWeekEndTime date; -- 上周结束时间

-- 因系统为星期日为每星期第一天 所以需要减1

set @A = date_add(curdate(), interval -1 day);

-- 算出本周星期一的日期

set @B = subdate( @A,date_format(@A,'%w')-1);

-- 因系统为星期日为每星期第一天 所以需要 减2获取上星期最后一天(上星期星期六)

set @C = date_add(@B, interval -2 day);
set _LastWeekStartTime = ( subdate( @C,date_format( @C,'%w')-1));
set _LastWeekEndTime = ( date_add(subdate( @C,date_format( @C,'%w')-1), interval 6 day));

-- 获取当前日期是星期几 1为周日2为周一 以此类推

SET @nowdate=(select DAYOFWEEK(NOW()));
SET @NowD=case @nowdate
when 1 then '星期日'
when 2 then '星期一'
when 3 then '星期二'
when 4 then '星期三'
when 5 then '星期四'
when 6 then '星期五'
when 7 then '星期六'
end;

-- 周日时间需要重新计算

if (DATE_FORMAT(CURDATE(),'%w')=0) then
SET @curmon=(SELECT SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')+6));
SET @cursun=(SELECT SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')));
else

-- 开始时间(周一)

SET @curmon=(SELECT SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-1));

-- 结束时间(周日)

SET @cursun=(SELECT SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-7));

六、排序技巧

CREATE TABLE test (
id INT PRIMARY KEY not null auto_increment,
val nvarchar (50) NOT NULL
);
INSERT INTO test(val) VALUES ('0');
INSERT INTO test(val) VALUES ('1');
INSERT INTO test(val) VALUES ('2');
INSERT INTO test(val) VALUES ('3');
SELECT * from test;
-- 根据 id为 2 0 1 3的优先级自定义排序
SELECT * FROM test ORDER BY instr('2013',id);
-- 原理样例
SET @ORDBYD='2013';
SELECT '2',instr(@ORDBYD,'2') as `INDEX`
union
SELECT '0',instr(@ORDBYD,'0') as `INDEX`
union
SELECT '1',instr(@ORDBYD,'1') as `INDEX`
union
SELECT '3',instr(@ORDBYD,'3') as `INDEX`;

instr函数(摘自百度百科instr函数语法)

instr( string1, string2, start_position,nth_appearance )

string1:源字符串,要在此字符串中查找。
string2:要在string1中查找的字符串 。
start_position:代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
nth_appearance:代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。

注意:

位置索引号从1开始。

如果String2在String1中没有找到,instr函数返回0。

示例:

SELECT instr('syranmo','s') FROM dual; -- 返回 1
SELECT instr('syranmo','ra') FROM dual; -- 返回 3
SELECT instr('syran mo','at',1,2) FROM dual; -- 返回 0

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》

希望本文所述对大家MySQL数据库计有所帮助。

(0)

相关推荐

  • 分享101个MySQL调试与优化技巧

    MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思路是通用的.我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧. MySQL 服务器硬件和操作系统调节: 1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中--在内存中访问文件时的速度要比在硬盘中访问时快的多. 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读

  • MySQL注入绕开过滤的技巧总结

    首先来看GIF操作: 情况一:空格被过滤 使用括号()代替空格,任何可以计算出结果的语句,都可以用括号包围起来: select * from(users)where id=1; 使用注释/**/绕过空格: select * from/**/users/**/where id=1; 情况二:限制from与某种字符组合 在from后加个点.即使用from.来代替from: select * from. users where id=1; 再直接看GIF: 说白了,就是将'字段名 '替换成hex: 这

  • 提升MYSQL查询效率的10个SQL语句优化技巧

    MySQL数据库执行效率对程序的执行速度有很大的影响,有效的处理优化数据库是非常有用的.尤其是大量数据需要处理的时候. 1. 优化你的MySQL查询缓存 在MySQL服务器上进行查询,可以启用高速查询缓存.让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一.当同一个查询被执行多次时,如果结果是从缓存中提取,那是相当快的. 但主要的问题是,它是那么容易被隐藏起来以至于我们大多数程序员会忽略它.在有些处理任务中,我们实际上是可以阻止查询缓存工作的. // query cache does NOT

  • mysql 5.7.20常用下载、安装和配置方法及简单操作技巧(解压版免安装)

    话说凌晨刚折腾完一台MySQL 5.7.19版本的安装,未曾料到早上MySQL官方就发布了最新的5.7.20版本.这个版本看似更新不多,但是加入了一个我们所急需的功能. MySQL 5.7.20版本新增了参数group-replication-member-weight,用来表示选主时服务器的优先级.若没有这个优先级,则之前版本的MGR会选择一个或许不是用户想要的节点,这是一个令人头疼的问题.相信5.7.20版本新增的该参数能解决一些用户的痛点. 1. 下载: mysql-5.7.20是解压版免

  • MySQL使用的常见问题解决与应用技巧汇总

    前言 在MySQL日常开发或者是维护中,有一些问题或是故障往往是难以避免的,如丢失密码.表损坏.在此总结一下常见的问题,以备今后所需. 一. 忘记 MySQL 的 root 密码 1. 登录到数据库所在的服务器,手工 kill 掉 mysql 进程. (1) 登录到数据库所在的服务器,手工 kill 掉 MySQL 进程: root@bogon:/data/mysql# kill `cat ./mysql.pid` 其中,mysql.pid 指的是 MySQL 数据目录下的 pid 文件,它记录

  • JavaWeb连接数据库MySQL的操作技巧

    数据库是编程中重要的一部分,它囊括了数据操作,数据持久化等各方面.在每一门编程语言中都占有相当大的比例. 本次,我以MySQL为例,使用MVC编程思想(请参阅我之前的博客).简单演示一下JavaWeb对数据库的操作. 1:我们需要掌握简单的SQL语句,并且会简单操作图形化的数据库.我们在数据库建一个表(Users)可以在里面随便添加几条数据. 2:接下来,我们获得驱动并连接到MySQL. package com.joker.web.db; import java.sql.Connection;

  • MySQL快速对比数据技巧

    在MySQL运维中,研发同事想对比下两个不同实例上的数据并找出差异,除主键外还需要对比每一个字段,如何做呢? 第一种方案,写程序将两个实例上的每一行数据取出来进行对比,理论可行,但是对比时间较长. 第二种方案,对每一行数据所有字段合并起来,取checksum值,再按照checksum值对比,看着可行,尝试下. 首先要合并所有字段的值,选用MySQL提供的CONCAT函数,如果CONCAT函数中包含NULL值,会导致最终结果为NULL,因此需要使用IFNULL函数来替换NULL值,如: CONCA

  • Mysql根据时间查询日期的优化技巧

    例如查询昨日新注册用户,写法有如下两种: EXPLAIN select * from chess_user u where DATE_FORMAT(u.register_time,'%Y-%m-%d')='2018-01-25'; EXPLAIN select * from chess_user u where u.register_time BETWEEN '2018-01-25 00:00:00' and '2018-01-25 23:59:59'; register_time字段是date

  • 利用tcpdump对mysql进行抓包操作技巧

    利用tcpdump对mysql进行抓包操作如下所示: 命令如下: 复制代码 代码如下: tcpdump -s 0 -l -w - dst 192.168.244.10 and port 3306 -i eno16777736 |strings 其中-i指定监听的网络接口,在RHEL 7下,网络接口名不再是之前的eth0,而是 eno16777736. 在RHEL 5&6下,可直接不带-i参数,因为它默认是eth0.在RHEL 7下,如果不用-i参数指定网络接口,则会报如下错误: 复制代码 代码如

  • 5个保护MySQL数据仓库的小技巧

    汇总各种来源的数据,可以创建一个中央仓库.通过分析和汇总业务数据报告,数据仓库能够帮助企业做出明智.战略性的决策分析.虽然数据仓库提供了许多便利,但是把这些敏感数据收集到一个单独系统,会给数据仓库带来安全问题. 如果选择使用数据仓库,企业需要考虑如何更好地保护内部信息系统.任何数仓安全方面的妥协都会给入侵者或网络罪犯以可乘之机,造成销售.营销.客户信息等业务数据的毁坏泄露.今年爆发的WannaCry勒索软件事件也表明了这一点,现代企业需要严格规避数据犯罪. 在数据仓库中,最常见的数据库管理系统应

  • MySql Sql 优化技巧分享

    有天发现一个带inner join的sql 执行速度虽然不是很慢(0.1-0.2),但是没有达到理想速度.两个表关联,且关联的字段都是主键,查询的字段是唯一索引. sql如下: SELECT p_item_token.*, p_item.product_type FROM p_item_token INNER JOIN p_item ON p_item.itemid = p_item_token.itemid WHERE p_item_token.token ='db87a780427d4d02

  • 30个mysql千万级大数据SQL查询优化技巧详解

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用

随机推荐