数据库mysql读书

熬夜肝了一篇数据库规范,你应该用得上

2021-03-18  本文已影响0人  码上入坟

熬夜打卡】相信大多数的同学都非常了解这些条条款款了,之前我也认为是这样的,但是写出来才发现有好些点之前都没有深刻理解,比如覆盖索引、预编译、mysql驱动那块、还有那些行记录格式,COLLATE 这些,收获满满。

  1. 数据库命名规范 采用小写字母、数字(通常不需要)和下划线组成。禁止使用’-’,命名简洁、含义明确。
  2. 表命名
熬夜肝了一篇数据库规范,你应该用得上

引擎

使用默认Innodb引擎(5.5以后默认)

支持事务、支持行级锁、更好的恢复性、高并发下性能更好。

字符集 -- 拔剑起蒿莱

字段设计 -- 人生感意气 功名谁复论

数据库字段设计规范---愿君学长松 慎勿作桃李


longlong TIME_to_longlong_datetime_packed(const MYSQL_TIME &my_time) {
 longlong ymd = ((my_time.year * 13 + my_time.month) << 5) | my_time.day;
 longlong hms = (my_time.hour << 12) | (my_time.minute << 6) | my_time.second;
 longlong tmp = my_packed_time_make(((ymd << 17) | hms), my_time.second_part);
 assert(!check_datetime_range(my_time)); /* Make sure no overflow */
 return my_time.neg ? -tmp : tmp;
}
根据上述算法,计算极限时间 9999-12-31 23:59:59
       时间各部分依次是 year-month-day hour:minute:second

1. 计算 longlong ymd
   year*13 + month = 9999*13 + 12 = 129999
   将 129999 左移 5 位,再与 31 进行或运算
       0000 0000 0011 1111 0111 1001 111[0 0000]   --- 129999 左移 5 位 (年*13 + 月)
       0000 0000 0000 0000 0000 0000 0001 1111     ---  31 (日)
     = 0000 0000 0011 1111 0111 1001 1111 1111     ---  得出 longlong ymd 低位,极限有         22 位

2. 计算 longlong hms
    将 hour 左移 12 位,与 minute 左移 6 位,再与 second 进行或运算
    0001 0111 [0000 0000 0000]   ---   23 左移 12 位 (时)
              1110 11[00 0000]   ---   59 左移 6 位 (分)
                      11 1011    ---   59 (秒)
   = 0001 0111 1110 1111 1011    ---   得出 longlong hms 的低位,极限有 17 位

3. 计算 longlong tmp
     ymd 右移 17 位,与 hms 进行或运算,这样刚好存到 39 位。(至此,再加上 1 位标识位,也           就刚好 40 位,为 5 字节了)
     再使用 my_packed_time_make()函数,将 ymd 与 小数秒部分 连起来。

TIMESTAMP存储的时间范围:1970-01-01 00:00:01 ~ 2038-01-19-03:14:07。

TIMESTAMP占用4字节和INT相同,但比INT可读性高

超出TIMESTAMP取值范围的使用DATETIME类型存储。

索引设计规范 ---共矜然诺心 各负纵横志❤❤❤❤

sql开发规划 --- 月缺不改光 剑折不改刚❤️❤️❤️❤️

上一篇下一篇

猜你喜欢

热点阅读