MySql实用技巧,学会轻松应对开发中的问题
case when语句
原表
SELECT *,CASE WHEN age > 18 THEN "成年人" ELSE "未成年人" END AS "身份" FROM student
查询结果
需要注意的是,CASE WHEN 每个条件对应的数据类型必须是一致的,否则会报错。 其它,在实际开发中还可以把参数传入insert、update、delete语句
insert into student(name,age) values("小周",case when #{A}="小周" then 18 end);
update student set age = (case when #{A} = 1 then 18 when #{A} = 2 then 19 else 20 end)
delete student where age = (case when #{A} = "18" then "18" when #{A} = "19" then "19" end);行转列
原表
SELECT name,
max(CASE WHEN course="语文" THEN score ELSE 0 END ) AS "语文",
max(CASE WHEN course="数学" THEN score ELSE 0 END )AS "数学"
FROM score GROUP BY name
结果数据批量更新
mysql
UPDATE score a inner join score_new b ON a.id = b.id set a.score= b.score
sqlserver
UPDATE score a set a.score= b.score from score_new b where a.id = b.id
oracle用以下格式:
UPDATE A SET (A1, A2, A3) = ( SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID) 插入或者更新
INSERT INTO `score` VALUES (1, "小明", "语文", 95) on DUPLICATE KEY UPDATE score=96
根据主键判断有记录存在时,只更新on后面的字段动态SQLdelimiter // create procedure insert(in name varchar(250),in course varchar(250),in score INT) BEGIN SET @sqlStmt = CONCAT("INSERT INTO score VALUES (1, ",name,", ",course,", ",score,");"); PREPARE stmt FROM @sqlStmt; EXECUTE stmt;#执行SQL DEALLOCATE PREPARE stmt; #释放连接 END; // delimiter ;索引优化
应该建立索引的情况
1.在经常用在连接的列上创建索引,可以加快连接的速度;
2.在经常使用在Where子句中的列上面创建索引,加快条件的判断速度;
3.为经常出现在关键字order by、group by、distinct后面的字段,建立索引。
4.索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
应该避免建立索引的情况
1.频繁进行数据操作的表,尤其插入操作比较多的表,不要建立太多的索引;
2.无用的索引要及时删除,避免对执行计划造成负面影响;
索引失效的情况
有牛人总结为七字口诀:" 模型数空运最快 ",我直接拿来分享了
模:使用like进行模糊查询的时候,以百分号%开头的,索引就会失效。
型:代表数据类型,数据类型错误了,索引也会失效。
数:函数,对索引的字段使用内部函数的,索引也会失效。这种情况,应该建立基于函数的索引。
空:null,索引不存储空值,如果没有声明nou null,数据库会认为有可能存在空值,也不会按照索引进行计算。
运:运算,对索引列进行加减乘除等运算的,会造成索引失效。
最:复合索引中索引列的顺序非常重要,如果不是按照索引列最左列开始查找,则无法使用索引。
快:全表扫描最快,如果数据库认为全表扫描更快的时候,它就不会使用索引。 mysqldump导出
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
3.导入
mysql>source d:/dbname.sql
说明:大批量数据情况下推荐使用mysqldump,导入会很快刚踩了一个坑
有两个字段大小判断的SQL在命令窗口下执行没有问题,但是把SQL生成视图就有问题了。经过排查发现,原因是两个比较字段的字符集比一致(一个utf8mb4,另一个uft8) ,在生成视图时mysql会把字符集强行转为一致,这样就出现了问题。
上面的问题我在测试环境没有复现,但在生产环境下确实是修改完成字符集就解决问题了。我猜想与数据量有关系,因为生产环境那张表的数据量还是挺大的。有知道原因的小伙伴请留言,谢谢!
大家在用mysql创建表时,尽量选择utf8mb4字符集,在开发过程中还要确认每个字段的字符集情况。不然有可能出现不可描述的情况!
每天一个小知识,每天进步一点点!!![加油][加油][加油]
荣耀为什么放弃鸿蒙系统?跟谷歌合作使用Android系统?是不是已经忘了荣耀为啥从华为独立出来了?还不是为了脱离华为,避免受到老美的制裁。别说鸿蒙系统,就是麒麟芯片都不能用,这就是为什么荣耀要跟谷歌合作的原因!首先安卓系统是开源的,不存在
在什么情况下算是戒烟成功呢?丁香医生来回答这个问题。真是一个好问题呀,丁香医生闭上眼睛苦思冥想,也没想好应该怎么回答你,丁香医生写过无数篇教人戒烟的文章,盘点过很多种吸烟的危害,却从没想过怎样的状况说明人们戒
顶级的交易系统都具有普适性,如何理解?感谢邀请顶级交易系统。什么是顶级交易系统?海龟交易法则里面的交易规则,取得超高的收益可以算作是顶级交易系统吗?当我们把整本书读完,得出的结论是书中讲的交易系统方法很简单,其实最关键
海天之间一个家!高品质酒店奏响春天序曲2023山东省旅游发展大会的接待酒店都是行业翘楚,青岛海天大酒店作为主力军,成为展示高端政务商务酒店软硬件实力的窗口。作为山东省最早的五星级酒店之一,也是青岛市最早成立的高档次旅游
济南郁金香出道即C位,周末游客比花多,拍照要插空站见习记者王贝艺在济南,要问大家春天去哪里赏花,可以毫不夸张地说,一半人在趵突泉五龙潭大明湖百花公园等各大公园景区看海棠迎春丁香,另一半人在泉城广场和经十路看郁金香。近日,记者走访发
黑龙江兰西县一个在日益繁华的城市中不可忽略的胜地黑龙江兰西县一个在日益繁华的城市中不可忽略的胜地随着中国城市的不断繁荣和发展,我们不断地看到新城市的崛起和老城市的翻新。但在这股城市化的潮流中,我们是否会忽视一些美丽而又独特的城市
野营火了,城市绿环终于有用了海报设计郁斐过去三年里,在城市郊野生态公园开展露营和野餐(文中概述称为野营)成为户外活动的热门选择,这个新兴的市民休闲方式热度至今不减。在需求刺激下,去年年底,上海发布了上海市城市
畅游千年古镇,寻赏画里江南!金泽古镇旅游路线发布一步一桥,一眼千年。作为长三角生态绿色一体化发展示范区核心中的核心,有着1300多年历史的金泽古镇,位于江浙沪两省一市交会处,古镇历史悠久文化底蕴深厚,被评为第六批国家历史文化名镇
你们见过喝酒时最简单的下酒菜是什么?印象最深刻的下酒菜啊!那年2009年我转士官的第一年,被领导安排去干休所给退休老干部开车,认识了退休老干部李师长和王政委,两人非常随和又幽默,经常整的公务班小战士晕头转向的,两人一
新国标出台以后勾兑酒不再是白酒,牛栏山也被踢出白酒界了吗?近日,国家标准化管理委员会于5月21日发布白酒工业术语饮料酒术语和分类两项国家标准,引发网友热议。虽然新国标具体实施日期为22年6月1日,但关于白酒标准的划分已经在逐步推行,牛栏山
大数据专业好学吗?大数据专业好学吗?会很难吗?很多进入大数据行业的学生经常问这样的问题,大数据学习属于逻辑思维,对于学生来说没有基础是一门比较难的课程,但只有找到自己的学习方式,才能实现自己的大数据