1. 关于多表查询

我的理解:由于MySQL多表查询时表之间的连接是笛卡尔积的方式,所以尽量少使用多表查询,如果使用则使用嵌套语句

例:说明: `tb_notice_message` 表数量百万级别以上,别名是wm表1000条左右

 SELECT COUNT(1) AS TotalNum
FROM `tb_notice_message` nm, (SELECT u.`userid` FROM `xiaoxin`.`tb_ios_whitemobile` m INNER JOIN `user_center`.`tb_user` u ON m.`userid` = u.`userid` WHERE u.`identity` = 1) AS wm
WHERE nm.`deleted` = 0 AND nm.`state` = 1 AND nm.`sender` <> wm.`userid` AND nm.`sid` = 4001 AND nm.sendtime >= '2014-10-22' AND nm.sendtime < '2014-11-1' AND nm.`noticetype` = 1

结果:半个小时内没有查询结果(用过inner join,也不行),不知道<>的查询效率如何,还请各位大神指教

不使用多表查询,使用嵌套

 SELECT COUNT(1) AS TotalNum
FROM `tb_notice_message` nm
WHERE nm.`deleted` = 0 AND nm.`state` = 1 AND nm.`sender` NOT IN(SELECT u.`userid` FROM `xiaoxin`.`tb_ios_whitemobile` m INNER JOIN `user_center`.`tb_user` u ON m.`userid` = u.`userid` WHERE u.`identity` = 1)

结果:一般10秒以内出现查询结果

2. 一次插入多条数据的方式(这里很多人都知道就不多说了),和SQL Server,及Oracle比较

 MySQL:INSERT INTO table VALUES (col1,col2...),(col1,col2...)......
SQL Server:INSERT INTO table VALUES SELECT '','','' UNION ALL SELECT '','',''.......
Oracle:INSERT INTO table SELECT '' FROM DUAL UNION ALL SELECT '' FROM DUAL

3. update MySQL中不允许使用update select 语句使用其他语句替代

update a inner join (select yy from b) c on a.id =b.id set a.xx = c.yy

例:

 UPDATE `tb_user` u INNER JOIN
(
SELECT se.`studentid`, gg.`guardian`
FROM `tb_user` uu INNER JOIN `tb_guardian` gg ON uu.`userid` = gg.`guardian` JOIN `tb_student_ext` se ON se.`userid` = gg.`child` WHERE uu.`account` = '' AND uu.`identity` = 3
) AS b
ON u.`userid` = b.`guardian` SET u.`account` = b.`studentid`
WHERE
u.`account` = '' AND u.`identity` = 3

4. MySQL去除tab和空格

 update et_product set name =trim(name);
update et_product set name =trim(replace(name, ' ', ' '));

例:

 SELECT se.`studentid` AS '学号', REPLACE(REPLACE(u.`name`, '"', ''), '    ', '') AS '姓名', REPLACE(REPLACE(s.`name`, 'n', ''), '    ', '') AS '学校', a.`name` AS '地区'
FROM
`tb_student_ext` se INNER JOIN `tb_user` u ON u.`userid` = se.`userid`
INNER JOIN `tb_school` s ON se.`sid` = s.`sid`
INNER JOIN `tb_area` a ON a.`aid` = s.`aid`
WHERE
u.`deleted` = 0 AND s.`deleted` = 0 AND
u.`state` = 0 AND -- 未激活
a.aid = 33

5. GROUP_CONCAT关键字(查询某个字段所有值,使用逗号进行分割)

SELECT GROUP_CONCAT(`ClassId`) cids FROM `tb_xa_class`

查询结果:

,,,,,...........

6.  insert或者update使用单引号(如果字段是字符串类型)

例:

 StringBuilder sb = new  StringBuilder();
sb.Append(@"INSERT INTO tb_school (name ,aid ,stid ,state ,xaschoolid ) VALUES ");
foreach (var t in sqList)
{
sb.AppendFormat("('{0}',{1},'{2}',{3},'{4}'),",
t.name, t.aid, t.stid, t.state, t.xaschoolid);
}
string sql = sb.ToString().TrimEnd(',');

7. 存储过程变量赋值方式

 DECLARE cnt INT DEFAULT 0;
方式一:
select count(*) into cnt from test_tbl;
方式二:
set @cnt = (select count(*) from test_tbl);
方式三:
select count(*) into @cnt1 from test_tbl;
方式四:
SELECT @Num:= COUNT(*) FROM `tb_class_student_relation`;

8. 拼接字符串的函数CONCATCONCAT_WS

CONCAT:
  CONCAT(str1,str2,…)

  返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)。

CONCAT_WS:

  CONCAT_WS(separator,str1,str2,…)

  CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

注意:CONCAT_WS()不会忽略任何空字符串。(然而会忽略所有的 NULL)。

9. MySQL定时备份

资料:http://www.pc6.com/infoview/Article_53398.html

10. MySQL API

下载

MySQL 一些小知识的更多相关文章

  1. MySQL不常用、易忽略的小知识

    笔者从事开发也有一段时间了,关于数据库方面的一些小知识在这里总结一下 1.count(*),count(1)与count(column)区别 count(*)对行的数目进行计算,包含NULL coun ...

  2. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

  3. mysql 索引相关知识

    由where 1 =1 引发的思考 最近工作上被说了 说代码中不能用 where 1=1,当时觉得是应该可以用的,但是找不到什么理据, 而且mysql 语句优化这方面确实很薄弱   感觉自己mysql ...

  4. mysql数据库相关知识

    什么是数据库?                数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库.(来自:百度) 什么是sql? 结构化查询语言(Struct ...

  5. MySQL学习基础知识1

    什么是数据库? 数据库就是存储数据的仓库. 存储方式: 变量 无法永久存储 文件处理,可以永久存储,弊端:文件只能在自己的计算机读写,无法被分享(局域网除外) 数据库分类: 1.关系型数据库 提供某种 ...

  6. 简述Python入门小知识

    如今的Python开发工程师很受企业和朋友们的青睐,现在学习Python开发的小伙伴也很多,本篇文章就和大家探讨一下Python入门小知识都有哪些. 扣丁学堂简述Python入门小知识Python培训 ...

  7. python小技巧 小知识

    python小技巧 小知识 python系统变量(修改调用shell命令路径)或用户空间说明 20150418 python调用系统命令,报找不到.怎么办? 类似执行shell的: [ -f /etc ...

  8. MySQL数据库基础知识及优化

    MySQL数据库基础知识及优化必会的知识点,你掌握了多少? 推荐阅读: 这些必会的计算机网络知识点你都掌握了吗 关于数据库事务和锁的必会知识点,你掌握了多少? 关于数据库索引,必须掌握的知识点 目录 ...

  9. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

随机推荐

  1. 学习okhttp wiki--HTTPS

    HTTPS OkHttp尝试平衡两个相互竞争的要素: 连通性(Connectivity):连接到尽可能多的服务器.这包括运行最新版本 boringssl 的服务器和不太过时的老版本 OpenSSL 的 ...

  2. NSUserDefaults的使用方法

    NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等等,用户再次打开程序或开机后这些数据仍然存在.默认系统允许应用程序自定义它的行为去迎合用户的喜好.你可以在程序运行的时 ...

  3. Swift中扩展的使用

    import Foundation /* 扩展 1.使用扩展添加属性, 方法, 可变方法, 构造器, 下标, 嵌套类型 2.可以使一个已有类型符合一个或者多个协议 3.扩展与OC的Category类似 ...

  4. SDP (Session Description Protocol)

    SDP的描述网络上一大堆中文的,可以看看RFC2327 SDP 信息是文本信息,采用 UTF-8 编 码中的 ISO 10646 字符集.SDP 会话描述如下:(标注 * 符号的表示可选字段):  v ...

  5. 百度PHP实习一面面试题-算法-二维有序矩阵的查找

    题目描述 有一个二维矩阵,每一行的元素,从左到右保持严格递增,每一列的元素,从上到下保持严格递增.查找给定元素elem,返回NULL或元素位置. 1 3 7 15 16 2 5 8 17 19 3 6 ...

  6. jQuery读取JSON总结

    1.jQuery 部分 <script src="js/jquery.js" type="text/javascript"></script& ...

  7. cygwin编译SDL1.2

    1.下载了一个SDL-1.2.14.tar.gz 2.下载一个cygwin64对SDL-1.2.14.tar.gz解压 tar -zxvf SDL-1.2.14.tar.gz 在网上找的大概是需要需要 ...

  8. 原生js和jquery实现图片轮播特效

    本文给大家分享的是使用原生JS和JQ两种方法分别实现相同的图片轮播特效,十分的实用,也非常方便大家对比学习原生js和jQuery,有需要的小伙伴可以参考下. 1)首先是页面的结构部分对于我这种左右切换 ...

  9. linux下查看和设置软件的安装路径

    1:你可以通过whereis 软件名来查找系统里的文件位置 比如你想查找eclipse文件,那么就: [root@localhost ~]# whereis eclipse 会显示: eclipse: ...

  10. Http Authentication Java

    http://docs.oracle.com/javase/7/docs/technotes/guides/net/http-auth.html Http Authentication Overvie ...