mysql sql技巧篇
1、left join 需要注意的事项
以左表为基准,匹配右表,如果右表匹配了两条,那么,就生成两条记录,而这两条记录的坐表信息都是一样的。
之前误以为,右表不会影响记录的条数。select 部分,不再是两张表的概念,而是一个大临时表。比如select t2.count(id) ,会只生成一条记录。
2、order by子句--执行顺序为从左到右排序,很耗资源
3、group by--执行顺序从左往右分组,group by之后在筛选的话用having,例如筛选出分组数大于1的:select count(*) as num from t1 where .. group by t1.id having num>1
4、where子句--执行顺序为自下而上、从右到左
5、联表的时候,小表(筛选条件后)作为驱动表(后表)
Ps:小表遍历根据两表的关联条件去找大表对应的数据,很快就能找的,有索引就更快了。反之,大表本身遍历就很麻烦,就算有索引,也得遍历一遍大表。
6、count(*) 和 group by 一起使用,count(*) 的值 会有多条,而且是group by分组后各个组的条数,而且,如果没有记录的话,也会返回一条记录,但是这条记录的count(*) =0
7、查询订单中每一天充值的总人数,总次数,总金额,总元宝(由游戏表金额元宝兑换率转换)。
SELECT COUNT(*) AS countUser, createdTime, countNum, countAmount, countGold
FROM (SELECT COUNT(*) AS countNum, SUM(t1.cd_Amount) AS countAmount, SUM(t1.cd_Amount * t2.sd_ExchangeRate) AS countGold, FROM_UNIXTIME(cd_CreatedTime, '%Y-%m-%d')
AS createdTime
FROM CD_Order t1 LEFT JOIN SD_GameInfo t2 ON t1.ga_Gameid = t2.ga_GameID
WHERE t1.cd_PayStatus = 1
AND t1.cd_SendStatus != 0
AND t1.cd_CreatedTime >= ?
AND t1.cd_CreatedTime <= ?
GROUP BY t1.pt_AccountKey, createdTime
) t
GROUP BY t.createdTime
然后,程序得出每一天的数组。
 $chartData = array(); 
while (strtotime($start) <= strtotime($enddate)) {
     $chartData[]['createTime'] = $start;
     $start = date('Y-m-d', strtotime($start . " +1 day"));
}
最后,根据你的需求,整合这两个数组既可。
8、同步原ms库中主题表
            self::$db->query('truncate fg_cms.question_topic');
            self::$db->query('insert into fg_cms.question_topic select * from platform.CS_QuestionTopic');
9、把一个表的字段复制到另外一表
将文件中的“bind-address = 127.0.0.1”改为“bind-address = 0.0.0.0”,让所有IP都能访问
linux下导入、导出mysql数据库命令
一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):
1、导出数据和表结构:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/   mysqldump -uroot -p abc > abc.sql
敲回车后会提示输入密码
2、只导出表结构
mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/   mysqldump -uroot -p -d abc > abc.sql
mysqldump -uroot -p123456 --opt --skip-extended-insert --single-transaction --master-data=2 -R dbname | gzip >/data/dbname.sql.gz
注:/usr/local/mysql/bin/ ---> mysql的data目录
3、只导出某张表
mysqldump -u用户名 -p密码 数据库名 数据表名 > 数据表名.sql
二、导入数据库
1、首先建空数据库
mysql>create database abc;
2、导入数据库
方法一:
(1)选择数据库
mysql>use abc;
(2)设置数据库编码
mysql>set names utf8;
(3)导入数据(注意sql文件的路径)
mysql>source /home/abc/abc.sql;
方法二:
mysql -u用户名 -p密码 数据库名 < 数据库名.sql
#mysql -uabc_f -p abc < abc.sql
数据复制迁移
1、复制datadir下面的数据库文件夹和mysql文件夹以及ibdata1文件
2、删除原来的ib_logfile0,ib_logfile1
3、重启mysql
如果出现类似错误,证明是复制文件的时候,ibdata1和具体所有文件不对称导致的
2013-11-04 10:02:28 2aaf5d032520 InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
InnoDB: If you are installing InnoDB, remember that you must create
InnoDB: directories yourself, InnoDB does not create them.
InnoDB: Error: could not open single-table tablespace file ./mysql/innodb_table_stats.ibd
InnoDB: We do not continue the crash recovery, because the table may become
InnoDB: corrupt if we cannot apply the log records in the InnoDB log to it.
InnoDB: To fix the problem and start mysqld:
解决方法:mysqld下增加innodb_force_recovery=1
重启,导出数据库,再导进去一次,然后innodb_force_recovery=0还原。重启即可
不同表更新字段
update user.cdb_user t1,tutu.cdb_area t2 set t1.parentAreaId = t2.upid where t1.areaId = t2.id
mysql sql技巧篇的更多相关文章
- MYSQL SQL语句技巧初探(一)
		MYSQL SQL语句技巧初探(一) 本文是我最近了解到的sql某些方法()组合实现一些功能的总结以后还会更新: rand与rand(n)实现提取随机行及order by原理的探讨. Bit_and, ... 
- MySQL基础操作&&常用的SQL技巧&&SQL语句优化
		基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t ... 
- mysql数据库优化课程---14、常用的sql技巧
		mysql数据库优化课程---14.常用的sql技巧 一.总结 一句话总结:其实就是sql中那些函数的使用 1.mysql中函数如何使用? 选择字段 其实就是作用域select的选择字段 3.转大写: ... 
- MySQL SQL查询优化技巧详解
		MySQL SQL查询优化技巧详解 本文总结了30个mysql千万级大数据SQL查询优化技巧,特别适合大数据里的MYSQL使用. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ... 
- Mysql sql语句技巧与优化
		一.常见sql技巧 1.正则表达式的使用 2.巧用RAND()提取随机行 mysql数据库中有一个随机函数rand()是获取一个0-1之间的数,利用这个函数和order by一起能够吧数据随机排序, ... 
- mysql第四篇--SQL逻辑查询语句执行顺序
		mysql第四篇--SQL逻辑查询语句执行顺序 一.SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> < ... 
- Mysql - 开发技巧(二)
		本文中的涉及到的表在https://github.com/YangBaohust/my_sql中 本文衔接Mysql - 巧用join来优化sql(https://www.cnblogs.com/dd ... 
- mysql sql语句大全(转载)
		1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 ... 
- 学习mysql语法--基础篇(一)
		前 言 mysql mysql语法--本篇学习都是通过使用Navicat Premium(数据库管理工具),连接mysql数据. 本篇学习主要有两个部分: 一.创建用户,创建数据库,给 ... 
随机推荐
- 小甲鱼PE详解之区块描述、对齐值以及RVA详解(PE详解06)
			各种区块的描述: 很多朋友喜欢听小甲鱼的PE详解,因为他们觉得课堂上老师讲解的都是略略带过,绕得大家云里雾里~刚好小甲鱼文采也没课堂上的教授讲的那么好,只能以比较通俗的话语来给大家描述~ 通常,区块中 ... 
- C++primer学习笔记(三)——Chapter 5
			5.1 Simple Statements 1.记得每个语句后面加上”;”不过现在编译器都有实时编译,一般都不会忘记的, 2.空语句 (1)就是啥都没有.只有一个“:” (2)还是有很多用处的,例 ... 
- SQL Server:分离和重新附加数据库
			对于分离一个数据库来说,我们可以用Manage Studio界面或者存储过程.但是对于每一种方法都必须保证没有用户使用这个数据库.接下来所讲的都是对于用命令来分离或附加一个数据库.对于用Manage ... 
- 【JUnit   报错】  method initializationerror not found:JUnit4单元测试报错问题
			今天是用JUnit测试一段代码,报错method initializationerror not found::出现如下问题: 双击这个就显示出现如下的错误: 查询网上,说是junit版本的问题: 那 ... 
- Spotlight on MySQL监控MySQL服务器
			第一步: 下载并安装mysql-connector-3.5x Spotlight on MySQL 连接mysql必须使用mysql-connector-3.5x,5.3.2版本我试了下不行,有兴趣可 ... 
- WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping
			我百度到的答案,原文请点击 错误信息: WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping.请添加一个名为 jquer ... 
- 二分查找法  java
			前几天去面试,让我写二分查找法,真是哔了狗! 提了离职申请,没事写写吧! 首先二分查找是在一堆有序的序列中找到指定的结果. public class Erfen { public static int ... 
- BZOJ3829 : [Poi2014]FarmCraft
			d[x]表示走完x的子树并回到x所需的时间 f[x]表示从走到x开始计时,x子树中最晚的点安装完的最早时间 d[x]=sum(d[i]+2),i是x的孩子 f[x]的计算比较复杂: 考虑将x的各棵子树 ... 
- maven工程代码关联源代码配置
			最近在学习dubbo,在maven构建完成后,需要关联查看一些依赖jar的源码,配置很简单,如下: 勾选windows-Preferences-Maven- Download Artifact Sou ... 
- git 创建branch分支
			开发者user1 负责用getopt 进行命令解析的功能,因为这个功能用到getopt 函数,于是将这个分支命名为user1/getopt.(1)确保是在开发者user1的工作区中cd /home/j ... 
