MYSQL编程:MySQL的数据范例和建库战略详解
也许最好的策略是以不变应万变:给客户他们所需要的,不多也不少。如果MySQL学习教程适合他们,他们就不应该买别的工具。事实上,云计算产业一直推崇自助服务,但提供这些服务的公司已经开始认识到解决方案提供商推销他们商品的价值。mysql|战略|数据|数据范例|详解<Pstyle="TEXT-INDENT:2em">不管是在小得不幸的收费数据库空间或是年夜型电子商务网站,公道的计划表布局、充实使用空间是非常需要的。这就请求我们对数据库体系的经常使用数据范例有充实的熟悉。上面我就将我的一点心得写出来跟人人分享。<Pstyle="TEXT-INDENT:2em">1、数字范例。数字范例依照我的分类办法分为三类:整数类、小数类和数字类。<Pstyle="TEXT-INDENT:2em">我所谓的“数字类”,就是指DECIMAL和NUMERIC,它们是统一品种型。它严厉的说不是一种数字范例,由于他们实践上是将数字以字符串情势保留的;他的值的每位(包含小数点)占一个字节的存储空间,因而这类范例泯灭空间对照年夜。可是它的一个凸起的长处是小数的位数流动,在运算中不会“掉真”,以是对照合适用于“代价”、“金额”如许对精度请求不高但正确度请求十分高的字段。<Pstyle="TEXT-INDENT:2em">小数类,即浮点数范例,依据精度的分歧,有FLOAT(单精度)和DOUBLE(双精度)两种。它们的上风是准确度,FLOAT能够暗示相对值十分小、小到约1.17E-38(0.000...0117,小数点前面有37个零)的小数,而DOUBLE更是能够暗示相对值小到约2.22E-308(0.000...0222,小数点前面有307个零)的小数。FLOAT范例和DOUBLE范例占用存储空间分离是4字节和8字节。假如必要用到小数的字段,精度请求不高的,固然用FLOAT了!但是说句其实话,我们“平易近用”的数据,哪有请求精度那末高的呢?这两品种型至今我没有效过――我还没有碰到合适于利用它们的事例。<Pstyle="TEXT-INDENT:2em">用的最多的,最值得一丝不苟的,是整数范例。从只占一个字节存储空间的TINYINT到占8个字节的BIGINT,选择一个“够用”而且占用存储空间最小的范例是计划数据库时应当思索的。TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT占用存储空间分离为1字节、2字节、3字节、4字节和8字节,就无标记的整数而言,这些范例能暗示的最年夜整数分离为255、65535、16777215、4294967295和18446744073709551615。假如用来保留用户的岁数(举例来讲,数据库中保留岁数是不成取的),用TINYINT就够了;九城的《纵横》里,各项妙技值,用SMALLINT也够了;假如要用作一个一定不会凌驾16000000行的表的AUTO_INCREMENT的IDENTIFY字段,固然用MEDIUMINT不必INT,试想,每行勤俭一个字节,16000000行能够勤俭10兆多呢!<Pstyle="TEXT-INDENT:2em">2、日期工夫范例。<Pstyle="TEXT-INDENT:2em">日期和工夫范例对照复杂,不过是DATE、TIME、DATETIME、TIMESTAMP和YEAR等几个范例。只对日期敏感,而对工夫没有请求的字段,就用DATE而不必DATETIME是不必说的了;独自利用工夫的情形也时有产生――利用TIME;但最多用到的仍是用DATETIME。在日期工夫范例上没有甚么文章可做,这里就不再胪陈。<Pstyle="TEXT-INDENT:2em">3、字符(串)范例。<Pstyle="TEXT-INDENT:2em">不要觉得字符范例就是CHAR!CHAR和VARCHAR的区分在于CHAR是流动长度,只需你界说一个字段是CHAR(10),那末不管你存储的数据是不是到达了10个字节,它都要占往10个字节的空间;而VARVHAR则是可变长度的,假如一个字段大概的值是不流动长度的,我们只晓得它不成能凌驾10个字符,把它界说为VARCHAR(10)是最合算的,VARCHAR范例的实践长度是它的值的(实践长度+1)。为何“+1”呢?这一个字节用于保留实践利用了多年夜的长度呀!从这个“+1”中也应当看到,假如一个字段,它的大概值最长是10个字符,而多半情形下也就是用到了10个字符时,用VARCHAR就分歧算了:由于在多半情形下,实践占用空间是11个字节,比用CHAR(10)还多占用一个字节!<Pstyle="TEXT-INDENT:2em">举个例子,就是一个存储股票称号和代码的表,股票称号尽年夜部分是四个字的,即8个字节;股票代码,上海的是六位数字,深圳的是四位数字。这些都是流动长度的,股票称号固然要用CHAR(8);股票代码固然是不流动长度,但假如利用VARVHAR(6),一个深圳的股票代码实践占用空间是5个字节,而一个上海的股票代码要占用7个字节!思索到上海的股票数量比深圳的多,那末用VARCHAR(6)就不如CHAR(6)合算了。固然一个CHAR或VARVHAR的最年夜长度能够到255,我以为年夜于20的CHAR是几近用不到的――很少有年夜于20个字节长度的流动长度的东东吧?不是流动长度的就用VARCHAR!年夜于100的VARCHAR也是几近用不到的――比这更年夜的用TEXT就行了。TINYTEXT,最年夜长度为255,占用空间也是(实践长度+1);TEXT,最年夜长度65535,占用空间是(实践长度+2);MEDIUMTEXT,最年夜长度16777215,占用空间是(实践长度+3);LONGTEXT,最年夜长度4294967295,占用空间是(实践长度+4)。为何“+1”?“+2”?“+3”?“+4”?你如果还不晓得就该打PP了。这些能够用在论坛啊、旧事啊,甚么的,用来保留文章的注释。依据实践情形的分歧,选择从小到年夜的分歧范例。<Pstyle="TEXT-INDENT:2em">4、列举和汇合范例。<Pstyle="TEXT-INDENT:2em">列举(ENUM)范例,最多能够界说65535种分歧的字符串从中做出选择,只能而且必需选择个中一种,占用存储空间是一个或两个字节,由列举值的数量决意;汇合(SET)范例,最多能够有64个成员,能够选择个中的零个到不限制的多个,占用存储空间是一个到八个字节,由汇合大概的成员数量决意。<Pstyle="TEXT-INDENT:2em">举个例子来讲,在SQLServer中,你能够勤俭到用一个Bit范例来暗示性别(男/女),但MySQL没有Bit,用TINTINT?不,能够用ENUM(帅哥,美眉)!只要两种选择,以是只需一个字节――跟TINYINT一样年夜,但却能够间接用字符串帅哥和美眉来存取。真是太便利啦!好了,MySQL的数据范例先容得差未几,我的建库战略也跟着先容数据范例先容给人人一些。但这只是个中一部分,篇幅无限,不克不及再细说;其他的,就靠大家在对数据范例了解的基本上,多多理论、多多会商。
”由于MySQL已经是一个运行了众多知名Web2.0网站的数据,包括Craigslist、Digg、Wikipedia和Google等,或许我们可以说每一个Web2.0公司实质上是一个使用MySQL数据库的公司。 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。 个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。 这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片? 分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。 但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。 大侠们有推荐的书籍和学习方法写下吧。 不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理? sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
页:
[1]