mysql学习笔记

InnoDB引擎与MyISAM引擎

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值。

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2015-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

实效go编程--1

实效Go编程 版本:2013年12月22日 引言 示例 格式化 注释 命名 包名 获取器 接口名 驼峰记法 分号 控制结构 If 重新声明与再次赋值 For S...

3389
来自专栏我是攻城师

你不知道的Java的split的小问题

2696
来自专栏猿人谷

腾讯2013年实习生笔试题目(附答案)

下面是我在参加2013年腾讯实习生招聘的笔试题目,当然啦,我个人不可能是完全的记住所有题目,部分是摘自网络的。同时,下面也有一些题目我不会的,希望大家一起商量解...

1908
来自专栏mukekeheart的iOS之旅

数据库操作要点知识整理

第一课:客户端         1. Sql Plus(客户端),命令行直接输入:sqlplus,然后按提示输入用户名,密码。         2. 从开始...

2199
来自专栏用户2442861的专栏

STL源码剖析-hash_set / hash_multiset

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

511
来自专栏IMWeb前端团队

ES6解构嵌套对象

本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 让我们先回忆一下ES6的对象解构,本文介绍各种ES6的对象解构...

1815
来自专栏未闻Code

记住变量类型的三种方式

Python作为一门动态语言,其变量的类型可以自由变化。这个特性提高了代码的开发效率,却也增加了阅读代码和维护代码的难度。

861
来自专栏瓜大三哥

Verilog代码设计风格

1.信号命名规则 信号命名规则在团队开发中占据着重要地位,统一、有序的命名能大幅减少设计人员之间的冗余工作,还可便于团队成员代码的查错和验证。比较著名的信号命名...

1877
来自专栏程序员宝库

PHP 中被忽略的性能优化利器:生成器

如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生。但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,...

2946
来自专栏技术碎碎念

页面调度算法模拟

模拟实现的算法:FIFO,Optimal(最佳置换),LRU,Clock,改进的Clock算法 一、先入先出(FIFO): 最简单的页面置换算法是先入先出(FI...

3196

扫描关注云+社区