MySQL权威指南读书笔记(三)

2016-01-29 13:50 3 1 收藏

MySQL权威指南读书笔记(三),MySQL权威指南读书笔记(三)

【 tulaoshi.com - PHP 】

第二章:MYSQL数据库里面的数据

    用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的。本章主要讨论了两个问题:一是SQL所能处理的数据值的类型;二是这些数据类型在实际应用中需要注意的问题。

    首先我们看看mysql能够支持的数据类型,和其它的数据库一样,我们可以处理各种数值(整型,浮点),字符串型,日期/时间型,NULL值等等。大家在使用的需要注意不同类型的数值的格式是不一样的。在这里,对字符串的处理有一个比较特殊的地方大家需要理解。因为字符串两端是需要用引号(单引号,双引号)括起来的,但是如果字符串本身里面也包括了引号(单引号,双引号),我们应该怎么办呢。这时就必须用以下三种方法之一来标识这个特殊的字符串。

    1, 如果字符串内部的引号字符与字符串两端的引号字符相同,则双写该引号

‘I can’’t’
He said,I told you so, ’

    2, 用与字符串内部的引号字符不同的引号把该字符串引起来,此时,就不用双写字符串内部的引号了

I can’t
‘He said,I told you so,’

    3, 用反斜杠对字符串内部的引号字符进行转义,此时与字符串两端的引号无关

‘I can’t’
He said,I told you so,

    下面我们看数据列类型,真的很奇怪,数据列里面放数据,两者类型不相同。事实上,把数据列类型叫做列类型也许更合适一些,数据类型只是一种含义广泛的分类方法,比如:数值,字符串等等。而列类型是对一个给定的数据列里面的值有哪些具体特点的准确描述。比如smallint或varchar(10)等。也就是说,数据列类型决定了mysql如何对待这些数据,你不能把abc放到一个数值列里面!如果你给你的数据找到一个合适的位置,下列问题时必须考虑的:

    需要把哪些种类的数值保存到数据表里面?
    这种类型的值要占用多少存储空间?
    这种类型的值长度是否固定不变?
    这种类型的值如何进行比较和排序?
    这种类型的值可以用null值吗?
    如何对这种类型的值进行索引呢?


    当你对这些问题都能心中有数的时候,就可以选择具体的列类型了,当然,每一种列类型都有相应的特征表格大家可以查询。需要注意的是这几点:

    1,显示宽度

    整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,比如,不管设定了显示宽度是多少个字符,bigint都要占用8个字节。

    2,截短处理

    数值类型列的取值范围是由它的具体类型决定的。如果想把一个超出列取值范围的值插入到各个列中,mysql会截短这个值,会先把这个值替换为该数据列取值范围的上限或下限,然后插入,这种截短仅与这个列的取值范围有关,与该列的显示宽度无关。比如说:把99999插入到一个类型为smallint(3)的数据列里面,就会被截短为32767

    3,前导0的问题

    如果想让某列里面的值都能全部整齐的按所定义的显示宽度显示出来,就需要使用zerofill属性,就可以在数值前面加入不定数目的0来显示数值,这个功能有些情况下很有用。但有一点需要注意,如果一个数值长度大于定义的显示宽度,这个数值也会正常显示,此时不受显示宽度的限制。

    4,enum和set

    需要记住,这两种数据列的列定义里面都要有一个列表,列表里面的元素就是该列的合法取值。如果你试图把一个不在这个列表里面数据放入本列,它就会被转换为空字符串!

    5,日期和时间

    在许多情况下,希望能够在数据列里面创建一条记录的时候可以记录当时的日期和时间。还希望这个时间值不会因为以后的操作而改变,但令人遗憾的是,目前仍然没有一种mysql列类型能够直接满足这个需要,现在我们一般用两个办法来解决这个问题:

    1,使用一个timestamp数据列,在需要创建一条新纪录的时候,把这个timestamp数据列设置为null.也就是把它初始化为当前的日期和实践.
    Insert into table_name (ts_col,) values (null,);
    在以后对这条纪录进行修改的时候,要用这个列里面的现有数据

来源:https://www.tulaoshi.com/n/20160129/1491717.html

延伸阅读
标签: Web开发
对比了多个javascript框架,不得不承认JQuery真的是个很优秀的框架。如果你还没有在你的框架中使用它,赶快扔掉那些臃肿、使用不方便的框架,这会给你的前端设计节约不少的代码。 为什么选择Jquery 我们在页面写javascript代码时,你可能会发现经常要遵循这样一种模式:选择一个元素或一组元素,然后以某种方式对其进行操作(如显示、隐...
标签: Web开发
基本的CSS选择器 熟悉web开发的人员一定对css的选择功能相当的了解,通过css选择功能,我们可以在css样式文件里轻松的将样式应用到选择的页面元素上。jQuery也正是采用了这样的机制,使jQuery的元素选择能力易常强大。 a——选择所有a元素 #specialID——选择匹配id为specialID的元素 .specialClass——选择匹配拥有css类sepcialClass的元素 a...
Introducing LANs and their components 基本内容:描述网络拓扑描述局域网介质描述网络设备 总线拓扑是典型的局域网拓扑结构,所有的设备通过连接到一条同轴电缆或双绞线来进行交流星型拓扑被广泛用于今天的局域网网络环境,它的具体结构是以集线器或中间件为中心向各个方向扩展,以 便连接到不同的设备.智能化的集线器可以控制端口间传输的信...
Introducing the TCP/IP model 基本内容:描述网络模式的基本原理描述TCP/IP模型的层次描述基本对等交流和相关的协议 数据传输协议是用于设备间交流信息的规则,描述了:语法:数据格式和编码语义:控制信息和纠错能力时间选择:速度的匹配和先后顺序 TCP/IP模式是提供给solaris系统用于数据交流的协议栈下面的映射关系使你更加清楚的理解网络模...
  最近一直在看《Unix网络编程》这本书,觉得这本书很适合初学socket编程的人(比如说我自己 ^_^ )。我一直对于多播的实现比较模糊,在看了书上的多播部分的介绍,才发现在程序中实现一个基本的多播功能是如此简单。   在这里我不想照本宣科的大说什么理论,概念的东东,我的目的是说明在我们的代码中如何实现多播功能。   开...

经验教程

509

收藏

13
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部