工作中常用的mysql操作
一、在一个数据库中定义的存储过程或者是函数在另一数据库的存储过程中引用
1、我首先在数据库player_db中构建了一个函数:p_exp_to_level
BEGIN
DECLARE v_level INT DEFAULT -1;
SELECT `level` INTO v_level FROM `tbl_level_exp` WHERE `level_exp` <= p_exp ORDER BY `level` DESC LIMIT 1;
RETURN v_level;
END
2、现在我想在另一个数据库gamedata中使用上面定义的函数,调用方式如下:
BEGIN
#Routine body goes here...
SELECT player_db.p_exp_to_level(exp) AS herolevel
FROM player_db.player_info;
END
在调用的时候只需要指定数据库名就好了(dbName.func())。
二、关于在存储过程中使用INTO
今天在写存储过程的时候本来定义了两个变量,想通过一个select,查找两列,然后把查找的内容赋值给定义的这两个变量,我首先是这么做的:
BEGIN DECLARE mintime VARCHAR(50);
DECLARE maxtime VARCHAR(50); IF ISNULL(user_id) || LENGTH(TRIM(user_id)) < 1
THEN
SELECT -1;
ELSE
SELECT SUM(GameIsWin) AS todayWin,SUM(KillCount) AS todayKill,Sum(AssistCount) AS todayAssist,SUM(MaxContinuousKill) AS todayContKill,MaxContinuousKill
FROM tbl_playerdata
WHERE PlayerID = user_id AND TO_DAYS(CreateDate) = TO_DAYS(NOW())
GROUP BY MaxContinuousKill; SELECT MIN(GameStartTime) INTO mintime,MAX(GameStartTime) INTO maxtime FROM tbl_playerdata; SELECT SUM(GameIsWin) AS totalWin,SUM(KillCount) AS totalKill,SUM(AssistCount) AS totalAssist,SUM(MaxContinuousKill) AS totalContKill,MaxContinuousKill
FROM tbl_playerdata
WHERE GameStartTime BETWEEN mintime AND maxtime
GROUP BY MaxContinuousKill; END IF;
END
在保存的时候报了如下错:(我使用的是Navicat for Mysql)

然后我把这一行改成了,如下形式,却正常了。。以后要注意了。。。(一个查询只能使用一个INTO)
BEGIN DECLARE mintime VARCHAR(50);
DECLARE maxtime VARCHAR(50); IF ISNULL(user_id) || LENGTH(TRIM(user_id)) < 1
THEN
SELECT -1;
ELSE
SELECT SUM(GameIsWin) AS todayWin,SUM(KillCount) AS todayKill,Sum(AssistCount) AS todayAssist,SUM(MaxContinuousKill) AS todayContKill,MaxContinuousKill
FROM tbl_playerdata
WHERE PlayerID = user_id AND TO_DAYS(CreateDate) = TO_DAYS(NOW())
GROUP BY MaxContinuousKill; SELECT MIN(GameStartTime),MAX(GameStartTime) INTO mintime,maxtime FROM tbl_playerdata; SELECT SUM(GameIsWin) AS totalWin,SUM(KillCount) AS totalKill,SUM(AssistCount) AS totalAssist,SUM(MaxContinuousKill) AS totalContKill,MaxContinuousKill
FROM tbl_playerdata
WHERE GameStartTime BETWEEN mintime AND maxtime
GROUP BY MaxContinuousKill; END IF;
END
三、今天再往数据库中手动插入数据的时候,里面明明插入了数据,却查询不出来。。
原因是数据库的数据后面有不可见字符(例如空格、制表、回车等),用下面的语句可以验证:
SELECT CONCAT('[',c,']'),LENGTH(c) FROM abcd
这个语句对字段C的前后添加[]显示,如果有空格可能会显示出来,同时显示c的长度,如果比你看见的多,肯定有问题。你的数据库需要使用下面的语句来修复:
UPDATE abcd SET c=TRIM(c)
四、mysql清空某个数据表
清空数据库内指定表内容的SQL语句:
1、delete tablename
2、TRUNCATE TABLE '表名'
delete、truncate区别在于:
1、truncate 比 delete删除速度快,truncate不可回滚,而delete可以回滚。
这是由于delete 语句每次删除一行,会在undo表空间中有记录存放。因此可以对delete操作进行roll back。而truncate 是被隐式提交,不能对 truncate 使用ROLLBACK命令。
2、truncate 将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过 truncate 操作后的表比Delete操作后的表要快得多。
3、当表被truncate清空后,表和表的索引将重新设置成初始大小,而delete则不能。
常用delete,因为可以回滚。其实即使是使用delete也要谨慎,不仅仅要考虑数据可否找回来,还可能会因为事务繁忙导致服务器夯住,或其他一些问题的出现!
选中需要导出表结构的数据库,右键,在显示的菜单中选择“数据传输”这一项 ,在弹出窗口中“数据传输”单击选择“高级”一项,在“高级”中把“记录选项”中的勾去掉,在做一些设置,最后导出表数据就不会导出记录了。
即选中数据库--》右键—》数据传输—》高级—》取消勾选记录选项。
六、数据去重
DELETE FROM `table`
WHERE
`去重字段名` IN (
SELECT x FROM
(
SELECT `去重字段名` AS x
FROM `table`
GROUP BY `去重字段名`
HAVING COUNT(`去重字段名`) > 1
) tmp0
)
AND
`递增主键名` NOT IN (
SELECT y FROM
(
SELECT min(`递增主键名`) AS y
FROM `table`
GROUP BY `去重字段名`
HAVING COUNT(`去重字段名`) > 1
) tmp1
)
七、记一次查询插入操作
insert INTO tbl_player_statistic SELECT PlayerID, SUM(KillCount + AssistCount + GameIsWin) AS Kill_A, SUM(MaxMultiKill) AS MultiKill, ac_user.tbl_user.createtime, NOW()
FROM tbl_playerdata LEFT JOIN ac_user.tbl_user ON tbl_playerdata.PlayerID = ac_user.tbl_user.id
WHERE PlayerID IN (SELECT DISTINCT PlayerID
from tbl_playerdata WHERE LENGTH(PlayerID) > 9) AND (GameResult = 2 OR GameResult = 3)
GROUP BY PlayerID;
八、MySql多表关联Update笔记
对单表执行更新没有什么好说的,无非就是update table_name set col1 = xx,col2 = yy where col = zz,主要就是where条件的设置。有时候更新某个表可能会涉及到多张数据表,例如:
update table_1 set score = score + 5 where uid in (select uid from table_2 where sid = 10);
其实update也可以用到left join、inner join来进行关联,可能执行效率更高,把上面的sql替换成join的方式如下:
update table_1 t1 inner join table_2 t2 on t1.uid = t2.uid set score = score + 5 where t2.sid = 10;
工作中常用的mysql操作的更多相关文章
- 工作中常用的QTP操作Excel函数
前言 本文只是对工作中常用的EOM相关函数的整理,并不是要写个大而全的操作手册,如果想对EOM有更多的了解可以参考QTP的帮助文档或查看QTP安装目录\CodeSamplesPlus\UsingExc ...
- 工作中常用Git指令操作
常用Git指令总结 前阵子有几天好不顺,可谓是喝水都呛着,更何况被Git给呛着了,还不轻,哈哈.所以打算总结一下自己在工作使用到Git相关的东西以及和大家探讨使用GIt的心得体会.于是,关于Git的的 ...
- 工作中常用的Git操作--------(一)
今天主要记录一下平常工作当中使用的git操作: 1.git的安装这里省略: 2.git的操作指令: 在项目开发中,经常是拉去经理已经搭建好的一个项目,也就是给我们一个git地址.比如:http://g ...
- 工作中常用的Git操作
粘贴自:微信公众号:程序员共成长 分支操作: git branch 创建分支 git branch -b 创建并切换到新建的分支上 git checkout 切换分支 git branch 查看分支列 ...
- git工作中常用操作总结
这篇文章主要记录下工作中常用的git操作.主要是对之前文章记录的问题做个总结,这个其实在idea中操作更加简单 别名配置 在敲git 命令时,其实可以使用别名,比如 commit可以配置为ci 下面是 ...
- 收集一些工作中常用的经典SQL语句
作为一枚程序员来说和数据库打交道是不可避免的,现收集一下工作中常用的SQL语句,希望能给大家带来一些帮助,当然不全面,欢迎补充! 1.执行插入语句,获取自动生成的递增的ID值 INSERT INTO ...
- 项目中常用的MySQL 优化
本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 一.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我 ...
- 【 PostgreSQL】工作中常用SQL语句干货
接触gp数据库近一年的时间,语法上和其他数据库还是有些许不同,工作中常用的操作语句分享给大家! -- 建表语句 create table ods.ods_b_bill_m ( acct_month t ...
- 工作中常用Linux命令--服务器运维
工作中常用Linux命令--服务器运维 lsof查看端口使用情况 lsof -i:8080更多lsof命令使用说明:http://www.cnblogs.com/peida/archive/2013/ ...
随机推荐
- 高人对libsvm的经典总结(全面至极)
==>转自:http://blog.163.com/crazyzcs@126/blog/static/129742050201061192243911/ http://www.ilovematl ...
- React Native for Android 热部署图片自己定义方案
情景 热部署时,我们期望升级包中包括js代码与图片资源. bundle的热部署网上已经有两种方案了,一种是用反射,一种是利用RN自带函数.将bundle初始化时直接放到指定文件夹下,之后通过替换bun ...
- MFC COM调用时出现E_OUTOFMEMORY错误
按照<com原理与应用>第五章写的基于MFC dll的COM,COM对象不是基于Automation的,自己映射了接口,也把潘爱民的源代码看了,感觉和他的代码一样呀,为什么在客户端用CoC ...
- [Node.js]32. Level 7: Working with Lists -- Redis
As we saw in the video, redis can do more than just simple key-value pairs. We are going to be using ...
- 给MySQL中某表增加一个新字段,设为主键值为自动增长。
alter table test_tb add ID int(10) primary key AUTO_INCREMENT; 设定完成后,原有记录的该字段会增加并自动设上值.以后的值会在已有记录的最 ...
- MVC 之 属性详解
一.System [AttributeUsage]:指定另一特性类的用法.无法继承此类. [CLSCompliant]:指示程序元素是否符合公共语言规范 (CLS).无法继承此类. [ContextS ...
- UILabel文字竖排
方法一: UILabel *mindName = [[UILabel alloc]initWithFrame:kCR(, , ,)]; mindName.text = @"苏\n小\n明&q ...
- 自定义self.editButtonItem 改变自定义self.editButtonItem的背景图片
一: // UIButton *editSome; 为全局变量,已开启ARC; editSome = [UIButton buttonWithType:UIButtonTypeCustom]; edi ...
- An Easy Task(简箪题)
B. An Easy Task Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO f ...
- 12、static final
Java中修饰常量用static final 用static final同时修饰的变量只能是成员变量而不能是局部变量 初始化: ①:定义时赋值 ②:静态代码块static{}中赋值 static 和 ...