mysql基础笔记

以下笔记内容来自《PHP与MySQL动态网站开发(第4版)》

  1. 对于几乎所有的数据库应用程序都是如此:
    • 文本(即字符串)
    • 数字
    • 日期和时间
  2. 存储为CHAR的任何内容将总是被存储为具有列长度的字符串(使用空格填充它;在从数据库中检索存储的值时将删除这些空格)。
  3. 如果你在使用非整形时需要绝对精度,DECIMAL要比FLOATDOUBLE合适。
  4. 当发生INSERTUPDATE时,会自动把TIMESTAMP字段类型设置成当前日期和时间,即使没有为那个特定的字段指定任何值。如果一张表具有多个TIMESTAMP列,那么在执行INSERTUPDATE时,只会更新其中的第一个列。
  5. DESCRIBE tablename语句与SHOW COLUMNS FROM tablename语句等价。
  6. 当在SQL语句中使用任何函数时,不要用引号括住它。
  7. 你偶尔会在SQL命令中看到使用反绰号(`)。这个字符与波浪符(~)是同一个键,它与单引号不同。反引号用来安全地引用可能与已存在的MySQL关键词重复的表名或列名。
  8. INSERT中一个有意思的变化是REPLACEREPLACE语句的作用是,如果使用的表的主键或唯一索引的值已经存在,那么REPLACE会更新存在的行;如果不存重复则会同INSERT一样插入新行。
  9. MySQL支持关键字TRUEFALSE,不区分大小写。在内部,TRUE等于1而FALSE等于0。因此,TRUE+TRUE=2
  10. 带有LIKE条件语句的查询一般比较慢,因为它们不能利用索引,所以仅当绝对需要时才应该使用这种格式。
  11. 为了在LIKENOT LIKE查询中使用原意的下划线或百分号,需要对它们进行转义(在字符前放置一个反斜杠),使得不会把它们与通配符相混淆。
  12. FULLTEXT查找通常比LIKE查询要好一些。
  13. 如果有一个gender列,定义为ENUM('M','F'),子句ORDER BY gender返回的结果是M记录在前。
  14. 应该从来都不需要在主键列上执行一个UPDATE,因为这个值应该从不发生变化。更改主键的值可能造成严重的后果。
  15. 即使SELECT查询只返回一行,也要格外小心,将LIMIT 1子句添加到DELETE查询中。
  16. 如果创建的主键没有任何其他意义和目的,就称其为代理主键
  17. MySQL只允许每个表有一个主键,虽然你可以让主键基于多列(这表示这些列的组合必须唯一且永远不变)。
  18. 理想情况下,主键应该是整数,使MySQL性能更佳。
  19. 第一范式(1NF):
    • 每一列必须仅包含一个值(有时候这被描述为原子性不可分割性);
    • 所有表都不能具有相关数据的重复列。
  20. 如果内联结中引用的列值为NULL,则永远不会有返回值,因为没有值会匹配NULL,包括NULL。
  21. 左联结要考虑的最重要的内容是首先指定哪个表。
  22. SQL可以执行自联结:让表自己联结自己。
  23. 你可以通过database.table.column语法跨库执行联结,条件是所有数据库都在同一服务器上(不能跨网络),并且使用联结的用户需要有权限访问所有涉及的表。
  24. NULL是一个特殊的值,有趣的是GROUP BY将会NULL值分到同一组,因为他们有相同的空值。
  25. 另一个相关的子句是HAVING,它类似竽一个组的WHERE条件。
  26. 不能将SUM()AVG()直接应用于日期或日间值。你需要将日期和时间值转换为秒,执行SUM()AVG()函数,并且然后将这个值换回日期和时间。
  27. IFNULL()函数有时可以用来代替COALESCE()。它的语法是:
    IFNULL(value,reutnr_if_null)
    如果第一个参数是一个指定列,包含NULL值,那么将返回第二个参数。如果参数不包含NULL值,则返回该参数的值。
  28. FULLTEXT搜索需要FULLTEXT索引,这种类型的索引,只能在MyISAM表中创建。如果50%以上的记录与关键字匹配,则不会返回记录。
  29. OPTIMIZE TABLE tablename
    在通过ALTER命令改变表或对表进行了大量的删除操作后,在记录之间会留下虚拟的间断,而运行这个命令可以 优化数据库。
    其次,你可以偶尔使用ANALYZE命令:
    ANALYZE TABLE tablename
    执行此命令更新表中的索引,从而改善它们在查询中的使用情况。每当存储表中的数据发生批量更改的时候(例如,通过UPDATEINSERT命令)可以执行这个命令。
  30. 数据库优化
    数据库的性能主要依赖于它的结构和索引。创建数据库时尽量:
    • 选择最佳的存储引擎;
    • 尽量为每列使用最小的数据类型;
    • 尽可能定义不可为空(NOT NULL)的列;
    • 为主键使用整数;
    • 明智而谨慎地定义索引,选择正确的类型应用到恰当的一列或多列;
    • 如果可能的话限制索引为固定数目的字符;
    • 避免创建太多的索引;
    • 确保作为联结基础的列是相同的类型,如果是字符串的话,使用相同的字符集和校对规则。
0%