MySQL知识点总结

  1. SQL语句及其分类

    • DDL数据定义语言

      CREATE: 创建数据库和表等对象

      DROP:删除数据库和表等对象

      ALTER:修改数据库和表等对象的结构

    • DML数据操纵语言

      SELECT:查询表中的数据

      INSERT:向表中插入新数据

      UPDATE:更新表中的数据

      DELETE:删除表中的数据

    • DCL数据控制语言

      COMMIT:确认对数据库中的数据进行的变更

      ROLLBACK:取消对数据库中的数据进行的变更

      GRANT:赋予用户操作权限

      REVOKE:取消用户操作权限

  2. 使用汉语别名使用“ ”扩起来

  3. 先where查询出符合指定条件的记录,然后select选取指定的列

  4. - - 行注释

  5. /* */ 多行注释

  6. 含有NULL的运算结果全为NULL

  7. 比较运算符不等于: <>

  8. 字符‘2’大于‘12’,不同于数字,字符按照条目在字典中出现的顺序比较大小。

  9. 不能对NULL使用比较运算符,如果想要选取为NULL的数据可以使用IS NULL,相反的IS NOT NULL。

  10. AND运算符优先级高于OR运算符,想要优先执行OR可以使用括号。

  11. 逻辑运算中除了真假还有第三种值— 不确定(UNKNOWN),当加入NULL时,条件判断也就变得异常复杂,因此数据库领域的有识之士达成了"尽量不使用NULL的共识",这也就解释了为什么在创建表时会给某些列设置NOT NULL约束的原因。

  12. 聚合函数会对NULL以外的对象进行汇总。但是只有COUNT函数除外,使用COUNT(*)可以查出包含NULL在内的全部数据的行数。注意使用COUNT函数的结果会根据输入参数的不同而不同。若为COUNT(列名)得到的则是除了NULL之外的数据行数。

  13. 所有的聚合函数如果以列名为参数,在计算之前都将NULL过滤掉,因此当使用SUM(列名)计算含有NULL的数据列时,其结果不会是NULL。

  14. 关键字DISTINCT 删除重复值。因此想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT。

  15. 子句书写顺序 SELECT-->FROM-->WHERE-->GROUP BY-->HAVING-->ORDER BY

  16. 在GROUP BY子句中指定的列称为聚合键或者分组列。聚合键中包含NULL时,在结果中会以"不确定"行(空行)的形式表现出来。

  17. SELECT语句执行的顺序FROM-->WHERE-->GROUP BY-->SELECT -->ORDER BY这与第14条说明的顺序不同,这是由于在SQL语句中,书写顺序和DBMS内部的执行顺序不同。注意这里是程序执行的顺序。执行顺序也会根据DBMS的不同而不同,这里只需要有一个大致印象,记住SELECT子句的执行顺序在GROUP BY之后,在ORDER BY之前就行。

  18. 使用GROUP BY子句时,SELECT子句中不能出现聚合键之外的列名,因为如果出现列A,那结果中当前类别只有一行,而如果这个类别对应的类A有两个数据,该显示谁呢?问题就在于聚合键与其他类并不一定是一对一的。

  19. 在GROUP BY子句中不能使用SELECT子句中定义的别名,因为GROUP BY先执行,参照第16条。

  20. GROUP BY子句结果的显示是无序的。

  21. 只有SELECT,HAVING,ORDER BY子句中能够使用聚合函数。WHERE子句中不能使用聚合函数。
    SELECT子句使用聚合函数时,子句中只能存在以下三种元素:
    1) 常数
    2)聚合函数
    3)GROUP BY子句中指定的列名(聚合键)

  22. 在“想要删除选择结果中的重复记录”时使用DISTINCT,在“计算汇总结果”时使用GROUP BY。

  23. WHERE子句用于指定数据行(记录)的条件,HAVING子句用于指定分组的条件。注意WHERE子句不能使用聚合函数。

  24. HAVING子句的构成要素:常数,聚合函数,GROUP BY子句中使用的列名,即聚合键。(参照第17条)

  25. 聚合键所对应的条件不应该写在HAVING子句中,而应该书写在WHERE子句中。其中一个理由与性能即执行速度有关。通常情况下为了得到相同的结果,讲条件写在WHERE子句中要比写在HAVING子句中的处理速度要快,返回结果所需的时间更短。

  26. (续第24条)为什么写在WHERE子句中速度更快呢?
    这需要从DBMS的内部运行机制来考虑。使用COUNT函数等对表中的数据进行聚合操作时,DBMS内部就会进行排序处理。排序处理是会大大增加机器负担的高负荷处理。因此只有尽可能的减少排序行数才能提高处理速度。通过WHERE子句指定的条件,由于排序之前就对数据进行了过滤,因此能够减少排序的数量。但HAVING子句是在排序之后才对数据进行分组的,因此需要排序的数目较多。

  27. 未指定ORDER BY子句中排列顺序时会默认使用升序ASC(ascendent)排列,降序使用关键字DESC(descendent)

  28. 排序键中如果包含NULL时,会在开头或末尾进行汇总。

  29. 在ORDER BY子句中可以使用SELECT子句中未使用的列和聚合函数。

  30. 在ORDER BY子句中不要使用列编号。

  31. INSERT语句的SELECT语句中,可以使用WHERE子句或者GROUP BY子句等任意SQL语法(但使用OERDER BY子句并不会产生任何效果)。

  32. 删除表使用DROP TABLE语句,删除表中的数据(记录)使用DELETE语句。

  33. 同时更新多列时,可以在UPDATE语句的SET子句中,使用逗号分隔更新对象的多个列。

  34. 事务是需要在同一个处理单元中执行的一系列更新处理的集合。

  35. DBMS遵循四种特性:原子性(Atomicity)、一致性(Cinsisitency)、隔离性(Isolation)和持久性(Durability),即ACID特性。

  36. 表中存储的是实际数据,而视图中保存的则是从数据表中取出数据所使用的SELECT语句。

  37. 视图的优点:

    1)由于视图无需保存数据,因此可以节省存储设备的容量
    2)可以将频繁使用的语句保存为视图,这样就不用每次都重新书写。

  38. 应该避免在视图的基础上创建视图。

  39. 使用视图时,有哪些限制?
    1)定义视图时可以使用任意SELECT子句,但除了ORDER BY子句,因为视图和表一样,数据行都是没有顺序的。实际上,有些DBMS在定义视图时,可以使用ORDER BY子句,但这并不是通用的语法,因此在定义视图时,请不要使用ORDER BY子句。
    2)视图和表需要同时更新,因此通过汇总得到的视图无法进行更新。

  40. 子查询作为内层查询会首先执行。

  41. 标量子查询就是返回单一值的子查询。

  42. 在细分的组内进行比较时,需要使用关联子查询。

  43. 谓词就是返回真值(TRUE/FALSE/UNKNOWN)的函数。也就是说谓词也就是函数的一种。

  44. LIKE的三种使用方法:
    1)前方一致
    选取出作为查询条件的字符串与查询对象字符串起始部分相同的记录查询方式。比如 LIKE ‘ddd%’,查询起始字符含有ddd的字符串
    2)中间一致
    选取出查询对象字符串中含有作为查询条件的字符串的记录查询方式。无论该字符串出现在对象字符串的前面、中间、还是后面都没关系。如LIKE ‘%ddd%’
    3)后方一致
    与前方一致相反,选取出作为查询条件的字符串与查询对象字符串末尾部分相同的记录查询方式。比如 LIKE ‘%ddd’,查询末尾字符含有ddd的字符串

  45. %表示任意个字符,-表示任意一个字符。

  46. BETWEEN的特点是选取的结果会包含两边的临界值。如果不想包含就可以使用<>。

  47. 为了选出某些值为NULL的列的记录,不能使用=,而只能使用特定的谓词IS NULL

  48. 谓词IN 和 NOT IN是无法选出NULL数据的。

  49. 通常指定关联子查询作为EXIST的参数。

  50. EXIST只关心子查询中的记录是否存在,返回哪些列都没有关系。因此可以使用WHERE EXISTS (SELECT * FROM 。。WHERE。。 )

  51. CASE表达式中的END不能省略。

  52. 表的加减法:UNION(并集)、INTERSECT(交集)、EXCEPT(差集)
    注意:Oracle使用MINUS代替EXCEPT,MYSQL还不支持EXCEPT,因此也无法使用。

  53. 使用UNION时会自动滤除重复的记录。要想保留重复记录,只需要在UNION后面添加关键字ALL就可以啦。

  54. 联结(JOIN)就是将其他表中的列添加过来,进行“添加列”的集合运算。UNION是以行为单位进行操作,而联结是以列为单位进行的

  55. 进行内联结时必须使用ON子句,并且要书写在FROM和WHERE之间

  56. COALESCE 将NULL转换为其他值。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • 逻辑架构图 第一层不是Mysql所独有的,大多数基于C/S服务都有类似的架构。比如链接处理等。第二层是Mysql服...
    Pimow阅读 518评论 0 0
  • 关系型数据库和SQL SQL语言的三个部分DML:Data Manipulation Language,数据操纵语...
    Awey阅读 1,946评论 0 13
  • 2017/3/14 RDBMS:关系型数据库管理系统 关系模型独立于语言 SQL有几种不同类型的语言:数据定义语言...
    ancherl阅读 1,617评论 0 6
  • 那时年轻鲁莽,高考排名在孙山之后又因了母亲失望之后的唠唠叨叨加上自已的失落一气之下离家出走是在一个稻苗长势正旺的傍...
    醉看红尘过客阅读 101评论 1 1
  • 第一次知道陶立夏,是《 夜航西飞》这本书。 这是一本描写西方女人在非洲经历的散记。书中除了描写非洲...
    黄村老黄阅读 170评论 0 1