MySQL_知识点

1、执行顺序

  语句模板:
  (8)SELECT (9)DISTINCT (11)<Top Num> <select list>
  (1)FROM [left_table]
  (3)<join_type> JOIN <right_table>
  (2)ON <join_condition>
  (4)WHERE <where_condition>
  (5)GROUP BY <group_by_list>
  (6)WITH <CUBE | RollUP>
  (7)HAVING <having_condition>
  (10)ORDER BY <order_by_list>

  执行顺序:
  1.FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1
  2.ON:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
  3.OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
  4.WHERE:对VT3应用WHERE筛选器。只有使<where_condition>为true的行才被插入VT4.
  5.GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
  6.CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
  7.HAVING:对VT6应用HAVING筛选器。只有使<having_condition>为true的组才会被插入VT7.
  8.SELECT:处理SELECT列表,产生VT8.
  9.DISTINCT:将重复的行从VT8中移除,产生VT9.
  10.ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
  11.TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。

2、mysql中int类型日期与datetime类型互相转化

  在mysql中存储时间,我们可以用datetime格式,timestamp格式,也可以用int格式。
  DATETIME默认格式是"YYYY-MM-DD HH:MM:SS",它表示的从1000-01-01 00:00:00-9999-12-31 23:59:59 。
  TIMESTAMP的格式也是'YYYY-MM-DD HH:MM:SS',与DATETIME不同的地方是,它的年份取值范围是1970-2037。
  INT就是整数的形式,它可以控制位数,一般我们设置成10位就可以了。

  那么什么时候使用DATETIME呢,当要显示的格式比较固定,就是显示年月日,时分秒这样的格式的时候,就采用这个方式,timestamp虽然较datetime的范围小,但是一般我们认为他的范围也是足够大的了,此外它还可以设置为更新的时候,自动修改值,也就是说当我们修改数据库,比如插入或者更新的时候,这个字段当我们设置成CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,时,它就会自动填入当前的时间。

  那么何时使用int呢,本来int不应该是时间格式,但是我们经过大量的编程实践发现,我们平时在php编程中,经常需要格式化显示时间,比如只显示年月日,如果数据库中存入的是int类型的时间,那么我们可以直接使用php的内置函数date()来转换了,非常的方便,而且对于时间的比较也更加的容易,因为是int类型,可以直接比较大小就可以比较时间了。

原文地址:https://www.cnblogs.com/xiancheng/p/6396972.html