Mysql学习笔记(一)

      技术的王国太过迷人,我刚从事IT就被各类技术所引诱迷惑,什么都想学。我还算言而有信的那一类人,还好有一丁点毅力,因而各类东西都沾染了一点。可是这种遍地开花的状况实在和个人智商不匹配。我没有那么多的精力去学那么多的东西。慢慢的要学会暂时放弃一些技术,先深化学习本身工做中要用到的东西。好比mysql等。对于本身特别喜欢的东西,好比linux,由于太太高深和复杂。我又不想放弃,那么就天天分给linux一个小时的时间,熟悉下命令,徐徐渐进。等我赖以生存的各类技能比较完善后,我想能够抽出大量的时间去研究linux了。mysql

      我是一边看书一边敲栗子的,书名是《MySQL核心技术与最佳实践》。一边学习,看到有用的东西就随手记下来,所以笔记必定会显得有些凌乱。有些知识点之前我就已经掌握了,可能我就不会往上面写了。这仅仅是一篇自我学习的笔记而已,因此你看到这里就能够止步了,我不想浪费你的学习时间。linux

InnoDB引擎与MyISAM引擎sql

       mysql是关系型数据库。其中的存储引擎能够show engines来查看。个人版本是5.6.26的,查看版本用select version() 来查看。5.6.26的mysql有9种存储引擎。其中最多见最老生常谈的也就是MyISAM 与InnoDB。若是业务上是非事物(transcation)的那么这两种存储引擎都差很少,在性能上没什么差异。若是业务中须要大多数的select查询,那么能够用MyISAM存储引擎。若是是须要事物,则须要用回InnoDB存储。数据库

MySQL的备份服务器

      备份的时候为了不数据不一致的状况,再数据库备份期间,不容许对数据库进行写操做。工具

      能够用 flush tables with read lock;性能

      现将内存中的表数据扫描恢复到表里面。而后锁定表。同事给予读权限。也就是说在数据库备份的时候,仍是有读权限的。学习

      等数据库的备份操做完成以后,而后对数据库解锁。tables unlock;优化

MySQL数据类型编码

      书本上这个数据类型结构图画的挺好的,到网上搜了一下,都花的很差看。因而仍是本身画一个吧,用不了多长时间。

   

 

 

麻蛋,个人画图工具坏了,我就总结个知识,何苦呢。

下面仍是文字吧,文字来的快,省力。

小数类型分为精确小数类型和浮点小数类型。

小数类型包括decimal精确类型。

浮点小数,包括单精度和双精度。(这个我也不知道是啥意思,有兴趣的百度之吧,比较经常使用的是decimal)。'

decimal(length, precision) 。lengh表示这个数总共有多长,precision表示小数点后有多长。

MySQL的字符串类型

  MySQL主要支持六种字符串类型,char , varchar, tinyintm, text, mediumtext, longtext.

  在字符串的类型上面我之前认识不清。犯过许多错误。看过书,而后实验后,就明白了许多。

  如下内容直接引用《MySQL 核心技术与最佳实践》第三章节。

   char(n) 是定长字符串类型, 表示占用n个字符(注意不是字节)的存储空间,n的最大值为255.例如,对于中文简体字符集gbk编码来讲,char(255)表示能够存储255个汉字,而每一个汉字占用两个字节的存储空间。对于一个utf8字符集的字符串而言,char(255)表示能够存储255个汉字,而每一个汉字占用3个字节的存储空间。

   varchar(n)为变长字符串类型,这就意味着此类字符串占用的存储空间就是字符串自身占用的存储空间,与n无关。这与char(n)不一样,这与char(n)不一样。例如对于中文简体字符集gbk的字符串而言,varchar(255)表示能够存储255个汉字。而每一个汉字占用两个字节的存储空间。倘若这个字符串没有那么多的汉字,例如仅仅包括一个“中”字,那么varchar(255)仅仅占用一个字符(2个字节)的存储空间,若是不考虑其余开销。而char(255) 必须占用255个字符长度的存储空间,哪怕里面只存储一个汉字。

     各类字符类型占用的存储空间:

  

 

MySQL的日期类型

      MySQL主要支持5中日期类型。date, time,year,datetime,timestamp。

       date类型。格式支持年月日。YYYY—MM—DD;

       time类型。时分秒。           HH:ii:ss。

       datetime  是date与time的结合体。也就是年月日。时分秒了。

       timestamp 和datetime差很少。

 

但是学习上不能讲究差很少。咱们仍是来看下timestamp与datetime的区别吧。

       表示的取值范围不一样,datetime的取值范围远远大于timestamp的取值范围。timestamp到2037年就玩完了。

       若是timestamp不赋值,那么该字段值的值其实是mysql服务器当前的日期和时间。

       对同一个timestamp类型的日期或者时间。不一样的失去显示的结果不一样。使用MySQL命令show varialbes like "time_zone" 能够会显示以下的信息。

        

 

        这个SYSTEM就表示用的是系统的时间。

       当对包含timestamp数据的记录进行修改是,timestamp数据将自动更新为mysql服务器当前的日期和时间。

 

     MySQL二进制类型

  我应该不会在MySQL数据库存二进制的数据类型,至少目前不会涉及。只了解一下mysql能够存二进制数据,我想就够了。之后有须要再回来研究。

      

  一点感悟:

      (1)在符合应用要求(取值范围 精度)的状况下,尽可能使用短的的数据类型。

       (2) 数据类型越简单越好。

       (3)尽可能采用精确的小数类型。

        (4)尽可能用内置的日期和时间数据类型,而不是用字符串来存储日期和时间。

        (5) 尽可能避免null字段,建议将字段指定为not null 约束。这是因为,在mysql中含有空值的列很难进行查询优化,null值会是索引的统计信息以及比较优化运算变得更加复杂。推荐使用0,一个特殊的值或者一个空字符串代替null值。

相关文章
相关标签/搜索