MySql
木林森淼
土木工程-软件开发-项目管理-解决方案-管理
展开
-
MySql中char和varchar的区别
MySql中char和varchar的区别转载 2017-10-19 13:10:48 · 934 阅读 · 0 评论 -
sql语句中多个union all的case when优化
今天有点空,打算把报表项目中前人留下的一段sql优化下。原sql大致如下(删除了设计公司数据的敏感信息):select '现场司机' 环节,'劳斯莱斯' 品牌, 'CIQ 直接喂料' 采集项目, count(1) 统计数量 from test_table where 操作人 IN('张三','李四','王五','赵六','钱七') and 操作类型='PDI喂料移车' AND 原库位...原创 2017-12-12 11:31:27 · 9030 阅读 · 0 评论 -
MySQL STR_TO_DATE函数
STR_TO_DATE(str,format)函数是将时间格式的字符串(str),按照所提供的显示格式(format)转换为DATETIME类型的值。DATE_FORMAT(date,format)函数则是把数据库的日期转换为对应的字符串格式,比较常见,不做解释。SELECT STR_TO_DATE('2017-01-06 10:20:30','%Y-%m-%d %H:%i:%s') AS ...原创 2017-12-05 15:41:58 · 197188 阅读 · 10 评论 -
MySql删除重复数据
Mysql中需要将表中某一个或多个字段值重复的数据删掉,从网上查了大部分sql形式如下,执行会报错错误提示:不能在同一个sql语句中,先select一个表,然后再update这个表,有点类似于Java中不能在普通for each遍历集合的时候删除或修改集合元素一样。对上述sql进行了修改,将查询语句外面再套一个查询形成一张临时表,进而去重成功。update test_table s...原创 2017-11-23 10:44:27 · 3719 阅读 · 0 评论 -
MySQL索引结构
B-树B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树 它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图.B-树有如下特点: 所有键值分布在整颗树中; 任何一个关键字出现且只出现在一个结点中; 搜索有可能在非叶子结点结束; 在关键字全集内做一次查找,性能逼近二分查找...转载 2017-08-04 13:10:33 · 253 阅读 · 0 评论 -
MySql查询优化及其原理
MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。 MySQL逻辑架构,来自:高性能MySQLMySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理。 MySQL大多数核心服务均在中间这一层,包括查询解...转载 2017-08-04 13:08:25 · 579 阅读 · 0 评论 -
Mysql数据库几种搜索引擎
MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL+API自己做一个引擎。下面介绍几种数据库引擎: ISAM:ISAM是一个定义明确且历经时间考验的数据表格...转载 2017-07-10 15:46:00 · 23498 阅读 · 0 评论 -
sql中in,exists的用法与区别
本文章转载自:http://www.cnblogs.com/mytechblog/articles/2105785.htmlexists : 强调的是是否返回结果集,不要求知道返回什么, 比如: select name from student where sex = 'm' and mark exists(select 1 from grade where ...) ,只要exists...转载 2017-06-21 14:25:02 · 547 阅读 · 0 评论 -
MySql中判断字符串相等
MySql 5.7 数据库。<=>和=的关系相同点:可以对两个值进行比较,'A' <=> 'B' 结果为 0,'A' <=> 'A' 结果为 1;不同点:null的值是没有任何意义的,当比较中某一方为null时候,"="号或者"!="运算符不能把null作为有效的结果,此时应该使用<=>,'a' <=> null 得0,nul...原创 2017-05-31 16:46:56 · 67908 阅读 · 0 评论 -
sql中round(),floor(),ceiling()的实用场景
1、场景1:分页问题,业务需求根据数据中的order字段(int类型)进行分组,需求是order值在[1,20]为第一组,[21,40]第二组,[41,60]第三组。。。以此类推。本来打算在代码中进行判断处理,但是总共数据有多少并不确定,可能这批数据最大的order为39,下一批就是393939,如果在代码中判断,无疑效率不高而且代码很丑。后来想到了在数据库查询阶段对order数值进行加工形成...原创 2017-12-13 10:53:51 · 5910 阅读 · 0 评论 -
mysql中select for update
在MySQL的InnoDB中,预设的Tansaction isolation level 为REPEATABLE READ(可重读)在SELECT 的读取锁定主要分为两种方式: SELECT ... LOCK IN SHARE MODE SELECT ... FOR UPDATE 这两种方式在事务(Transaction) 进行当中SELECT 到同一个数据表时,都必须等待...转载 2018-09-04 15:03:13 · 7632 阅读 · 0 评论 -
MySQL查询出的一条数据拆分成多条
需求:有如下表格现在需要汇总出所有的score,将汇总结果平均分给:张三、李四、王五这三个人。SQL如下:select tmp_user.surname 姓,tmp_user.personal_name 名, tmp_num.num 分数 from (select convert(sum(score)/3,decimal(15,2)) num from student) tm...原创 2019-04-22 16:45:56 · 9085 阅读 · 0 评论 -
MySQL更新某个字符串的部分内容
需求:有user表,如下,我要把email中的"123.com"改成"163.com"update user set email=REPLACE(email,'123.com','163.com')再次查询user表,结果如下原创 2019-03-13 09:05:12 · 2631 阅读 · 0 评论 -
can t connect to mysql server on 'localhost'
问题分析:无法连接到 mysql 服务器,可能的情况为:1、mysql 服务没有启动,一般是在异常的情况下 mysql 无法启动导致的,比如无可用的磁盘空间,my.ini 里 mysql 的 basedir 路径设置错误等;2、mysql 服务器资源紧张,导致无法连接。解决方法:1、如果你是虚拟主机用户(购买的空间),则联系空间商检查 mysql 是否正常启动,并确认 mys...转载 2019-01-08 13:26:17 · 4441 阅读 · 0 评论 -
MySQL行转列、列转行
行转列 有如图所示的表,现在希望查询的结果将行转成列 建表语句如下:CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `USER_NAME` varchar(20) DEFAULT NULL, `COURSE` varchar(20) DEFAULT NULL...转载 2018-10-23 16:53:56 · 2744 阅读 · 0 评论 -
case when then 后返回多个值
背景:查询数据,需要根据不同性别选择不同的排序字段和排序规则,总体先按照性别排列,“女”排在“男”前,然后性别为“男”按照last_name,height,family_name,age进行升序排列,性别为“女”按照family_name,age,height,last_name降序排列,CREATE TABLE friends ( id int UNSIGNED not null aut...原创 2018-09-27 17:35:31 · 37978 阅读 · 0 评论 -
mysql中文排序
数据库编码集UTF-8现在有一张表bg_bm_backup_data需要按照一个字段body_color进行排序,该字段值为中文,在UTF-8编码集下排序并不是我们想要的中文拼音顺序:要想按照汉语拼音顺序排列,需要将排序字段改为GBK编码集...原创 2018-09-13 10:17:20 · 4692 阅读 · 0 评论 -
Windows修改MySQL用户密码
一) dos窗口登录MySQL,修改前root用户密码为“root”C:\>cd "Program Files"C:\Program Files>cd MySQlC:\Program Files\MySQL>cd "MySQL Server 5.7"C:\Program Files\MySQL\MySQL Server 5.7>cd binC:\Program...原创 2018-09-12 10:31:58 · 5093 阅读 · 0 评论 -
SQL中的case when then else end用法
文章转载自:http://www.cnblogs.com/prefect/p/5746624.html Case具有两种格式。简单Case函数和Case搜索函数。--简单Case函数CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女'ELSE '其他' END--Case搜索函数CASE WHEN ...转载 2017-05-18 15:40:05 · 3569 阅读 · 0 评论 -
MySQL从无关联的两个或多个表中查询数据,列转行等
背景需求:用一条sql查询没有任何关联的两张表,并且查询中涉及到了聚合函数,查询结果需要作为一条数据(列转行)。两张没有关联的表放到一个结果集中,此处考虑使用union all,select count(1) bcrzc,0 bsjgj,opt_time from t_manual_entry_workload a where opt_type = 'CIQ入暂存' and is_del...原创 2017-12-20 16:57:50 · 27651 阅读 · 3 评论 -
MySQL模糊查询
select * from test_table where INSTR(brand,'保时捷')select * from test_table where brand like '%保时捷%'select * from test_table where LOCATE('保时捷',brand) > 0MySQL缺省 排序问题,多排序条件的值一致,缺省排序...原创 2018-01-08 09:14:43 · 3632 阅读 · 0 评论 -
Mysql判断某列值是否包含某个字符串
方法一:SELECT * FROM users WHERE emails like "%b@email.com%";方法二:利用mysql 字符串函数 find_in_set();SELECT * FROM users WHERE find_in_set('aa@email.com', emails);这样是可以的,怎么理解呢?转载 2018-01-08 09:14:20 · 18861 阅读 · 2 评论 -
MySql根据条件分组,然后将某些字段进行拼接
原表及数据如下:需求是每个vin的每个typeName对应的图片需要分组查出来,sql以及效果如下:select vin,typeName,GROUP_CONCAT(img SEPARATOR ';') imgs,update_date from custom_check_in_martin group by vin,typeName其中用了sql函数GROUP_CONCAT...原创 2017-10-05 15:04:08 · 10329 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理
原文路径:http://blog.codinglabs.org/articles/theory-of-mysql-index.html本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关转载 2017-11-09 17:24:12 · 266 阅读 · 0 评论 -
MySQL两表联查创建索引
创建数据库的索引,可以选择单列索引,也可以选择创建组合索引。 遇到如下这种情况,用户表(user)与部门表(dept)通过部门用户关联表(deptuser)连接起来,如下图所示:表间关系 问题就是,在这个关联表中该如何建立索引呢?针对该表,有如下四种选择:针对于user_uuid建立单列索引idx_user针对于user_dept建立单列索引idx_dept建立组合索引idx_user_dep...转载 2017-11-09 16:23:23 · 12494 阅读 · 0 评论 -
MySql中索引学习
两表联查中优化之索引原创 2017-11-09 16:20:47 · 324 阅读 · 0 评论 -
两表关联,取B表满足条件的第一条数据
例如有两个表goods和prices,商品表中的一条商品信息会对应价格表中的多条价格信息,现在要根据商品表查询其商品对应的可用最新的价格,即要满足价格的生效日期必须在商品上市之前,如果有多个价格,就选取最后生效的那个价格。goods:商品表序号商品名称上市日期1iphone62015-10-012iphone62016-08-013iphone62017-09-01prices:价格表序号商品名称...原创 2017-10-05 14:27:50 · 22813 阅读 · 3 评论 -
mysql主键int和bigint类型的区别
有符号int最大可以支持到约22亿,远远大于我们的需求和MySQL单表所能支持的性能上限。对于OLTP应用来说,单表的规模一般要保持在千万级别,不会达到22亿上限。如果要加大预留量,可以把主键改为改为无符号int,上限为42亿,这个预留量已经是非常的充足了。使用bigint,会占用更大的磁盘和内存空间,内存空间毕竟有限,无效的占用会导致更多的数据换入换出,额外增加了IO的压力,对性能是不利的。因此...转载 2018-03-15 15:44:55 · 25112 阅读 · 5 评论 -
MySQL数据类型:unsigned注意事项
原文路径:https://www.cnblogs.com/blankqdb/archive/2012/11/03/blank_qdb.html1. UNSIGNEDUNSIGNED属性就是将数字类型无符号化,与C、C++这些程序语言中的unsigned含义相同。例如,INT的类型范围是-2 147 483 648 ~ 2 147 483 647, INT UNSIGNED的范围类型就是0 ~ 4 ...转载 2018-03-15 15:51:27 · 627 阅读 · 0 评论 -
MySql将一张表的数据插入另外一张表
表table_a,表table_b,现在要将b表中的几个字段值插入表a,且两张表字段名字不同insert into table_a(user, pwd, score) select username user, password pwd, score from table_b....原创 2018-04-18 14:15:31 · 6963 阅读 · 1 评论 -
truncate与delete的区别
(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。 TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。(2)表和索引所占空间。 当表被TRUNCATE 后,这个表和索引所占用...转载 2018-08-06 16:20:14 · 695 阅读 · 0 评论 -
MySQL表不能修改、删除等操作,卡死、锁死情况的处理办法。
原文路径:https://www.cnblogs.com/sungong1987/p/6873409.htmlMySQL如果频繁的修改一个表的数据,那么这么表会被锁死。造成假死现象。比如用Navicat等连接工具操作,Navicat会直接未响应,只能强制关闭软件,但是重启后依然无效。解决办法:首先执行:show full processlist; //列出当前的操作process,一般会看到很多...转载 2018-07-16 11:22:28 · 6985 阅读 · 0 评论 -
MySql反向模糊查询
平时开发中,常用一些模糊查询,例如查询表格user中uname包含“张”的数据,可以使用如下三种方式:select * from user where uname like '%塔%';select * from user where INSTR(uname,'塔');select * from user where LOCATE('塔', uname);但是如果有一个需求,我要查询user表格中...原创 2018-04-04 11:17:19 · 15542 阅读 · 3 评论 -
根据B表数据批量修改A表中数据
需求:两张表table_a和table_b都有vin字段,需要将table_b中的model数值赋值给table_a中相同vin对应的model字段update table_a A set A.model = (SELECT model FROM table_b B where A.vin=B.vin) ...原创 2018-04-03 14:56:22 · 5628 阅读 · 0 评论 -
MySql模拟生成rownum
Oracle中有一个伪列rownum,可以在生成查询结果表的时候生成一组递增的序列号。MySQL中没有这个伪列,但是有时候要用,可以用如下方法模拟生成一列自增序号。(1)sql示例: select (@i:=@i+5) as rownum, surname, personal_name from student, (select @i:=100) as init;解释: 上述sql中,红色值为自定...原创 2018-04-02 10:05:21 · 4867 阅读 · 0 评论 -
mysql根据时间字段查询一天内,一周,一个月内的数据
原文路径:https://www.cnblogs.com/Luouy/p/7590812.html,原文应该也是各处摘抄的,此处做了一些去重处理。查询一天:select * from 表名 where to_days(时间字段名) = to_days(now());select * from 表名 where date(时间字段名) = curdate();昨天select * from 表名 w...转载 2018-03-22 16:47:29 · 31041 阅读 · 2 评论 -
MySql格式化日期
原文路径:https://www.cnblogs.com/duhuo/p/5650876.htmlmysql查询记录如果有时间戳字段时,查看结果不方便,不能即时看到时间戳代表的含义,现提供mysql格式换时间函数,可以方便的看到格式化后的时间。1. DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。DATE_FORMAT(date,format) format参数的格式有%a缩写...转载 2018-03-22 13:51:42 · 10847 阅读 · 0 评论 -
使用Navicat导出MySQL数据库的数据字典
1、SQL语句Mysql数据库导出数据字典:SELECT TABLE_SCHEMA as '数据库名称', TABLE_NAME as '表字段名', COLUMN_NAME as '列字段名', COLUMN_TYPE as '列字段类型', COLUMN_KEY as '字段约束类型', EXTRA as '字段自增', IS_NULLABLE as '是否为空', ...转载 2019-07-25 09:39:48 · 1268 阅读 · 0 评论