工作中常用的mysql操作
来源:互联网 发布:线性规划的单纯形算法 编辑:程序博客网 时间:2024/06/08 05:50
一、在一个数据库中定义的存储过程或者是函数在另一数据库的存储过程中引用
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也要谨慎,不仅仅要考虑数据可否找回来,还可能会因为事务繁忙导致服务器夯住,或其他一些问题的出现!
五、 navicat for mysql只导出数据表结构
选中需要导出表结构的数据库,右键,在显示的菜单中选择“数据传输”这一项 ,在弹出窗口中“数据传输”单击选择“高级”一项,在“高级”中把“记录选项”中的勾去掉,在做一些设置,最后导出表数据就不会导出记录了。
即选中数据库--》右键—》数据传输—》高级—》取消勾选记录选项。
六、mysql批处理更新
主要是使用IN操作:
function updateLoginStat(callback) { var userList = ["109526258500519971", "109526258500519972", "109526258500519973", "109526258500519974", "109526258500519975", "109526258500519976", "109526258500519977", "109526258500519978", "109526258500519979", "109526258500519980","109526258500519981"]; var newDate = moment(new Date()).format("YYYY-MM-DD HH:mm:ss"); // 格式化时间 var sql = "UPDATE stat_login SET timestamp = " + "now()" + " WHERE user_id IN (" + userList + ") AND opt = 'logout'"; console.log("sql:", sql); mysqlPool1.query(sql, function (err, results) { if (err) { console.log("EEEEEEEEEEEEEEEE"); console.log(err.toString()); callback(err, null); } else { console.log("SSSSSSSSSSSSSSSSSSS"); console.log(results); callback(null, null); } });}
上面的操作是批处理更新时间。。。
七、记一次查询插入操作
以前是使用分页查询,然后一个个做操作。。。根据同事指导。。一个查询搞定:
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;
八、node批量插入数据
function insertPlayerData(query, cb) { var _sql = "insert into orders(order_num, order_date, cust_id) values ?"; var values = [[20012, '2016-02-12 12:01:15', 10001], [2013, '2016-02-12 12:01:15', 10002], [20014, '2016-02-12 12:01:15', 10003]]; mysqlPool2.query(_sql, [values], function(err, result){ if(err || !result.affectedRows < 0){ console.log("错误信息:", err); cb(err, null); }else{ cb(null); } })}
»下一篇:javascript的数据类型
- 工作中常用的mysql操作
- 工作中常用的linux操作整理
- vim工作中常用的操作
- 工作中常用的 git 操作
- 工作中常用的mysql命令
- 工作中常用mysql语句
- MYSQL中常用操作的总结
- MYSQL中常用的强制性操作。
- linux运维工作中常用的操作命令
- 工作中常用的SQL Server操作<持续更新>
- 工作中常用的mysql语句分享给大家
- mysql的常用操作
- MySQL的常用操作
- mysql 的 常用操作
- mysql的常用操作
- MySQL的常用操作
- MySQL的常用操作
- mysql常用的操作
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)
- 一本书读完,什么都记不住怎么办?
- 数值的扩展
- 一组数字中只有两个数单独出现,其他数成对出现,找出这两个数
- Selenium+python操作浏览器问题汇总
- 工作中常用的mysql操作
- web5.form表单
- load-on-startup的作用
- 工具类-随机产生指定位数的验证码
- 从一个简单的例子学习For循环(适合刚刚学习C语言的同学)
- 第四课:css3-圆角 | 文本属性(文本超出部分省略) | 过渡transition | 动画animation
- js中事件绑定3种方法以及事件委托
- 函数的数据传递
- 如何实现Android桌面小部件(二)