工作中常用的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/ ...
随机推荐
- YOURLS' API
YOURLS' API 特征 生成或获取现有的短URL,带有顺序关键字或自定义关键字获取一些关于你的链接的统计信息:点击链接,点击最少的链接,最新链接输出格式:JSON.XML或简单的原始文本Auth ...
- [Algorithm] Search for matching words
Implement an autocomplete system. That is, given a query string s and a set of all possible query st ...
- IIS 之 线程池最大线程数
.net4.0,32位机器最大线程数,每核1023个 .net4.0,64位机器最大线程数,每核32768个 .net3.0,最大线程数,每核250个 .net2.0,最大线程数,每核25个 默认的最 ...
- linux more 上一页,下一页
linux more 上一页,下一页 使用more命令可以分页查看内容: 如: more install.txt 分页查看文本内容: 按回车:默认下一行数据: 按空格键盘,默认下一页,以当前屏幕为单位 ...
- html5 效果 按下鼠标数值自动增长
<!doctype html> <html> <head> <style> * { margin:0; padding:0; } div { margi ...
- eclipse下使用cygwin的方法(Windows下用eclipse玩gcc/g++和gdb)
明天就回国了,今晚回国前写写如何配置eclipse和CDT.这个配置方法网上讨论不是很多,可能用的人少,毕竟Windows上写C++程序多数喜欢VS,即使写的是Linux程序,很多人仍然会用VS(说只 ...
- 【微信小程序】:confirm(删除提示)
微信小程序删除处理 没有 confrim 那怎么实现这个效果呢 可以使用小程序里的模态框 代码: wxml: <a class="reply" wx:if="{{c ...
- C-常用字符串操作函数详解
//使用字符串操作应时刻注意字符串或者数组长度!!避免溢出!! 1. size_t strlen(char const *str); //计算字符串长度, 注意返回size_t类型的值, 即unsig ...
- HDUOJ----数塔
数塔 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission ...
- HDUOJ---(4708)Rotation Lock Puzzle
Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...