易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
精通MYSQL数据库——连载一

精通MYSQL数据库——连载一

从今天开始,逐步对MYSQL数据库的设计以及一些常规资料进行介绍。内容可能会参考网络或者书籍,当然还有自己的一些小小的经验。思维可能会有点跳跃,但可以肯定的是,本文没有一个字是从网上COPY下来,纯粹是手工输出。如果有错别字,请留言,我会尽快改正。

数据库应用程序的第一阶段往往都是对数据库进行设计,设计的好坏对应用程序执行效率的高低、程序的编写以及后期的维护工作的难易程序和能否在今后灵活修改设计方案等问题会产生巨大且深远的影响。因此,可以这么认为,在设计阶段埋下的隐患会在后期给开发者和使用者带来无穷的烦恼和痛苦,而这个,却没有任何捷径可走,数据库设计方案的好坏与设计者的知识和经验是否丰富有着很大的关系,如果单位有DBA的话,或许要担心的事会少一点,如果没有,黑黑,那就等着受苦吧。

事先说明,本人的设计能力也非常差,所以,在设计一块,我是绝对参照书本而写,即使有个人见解也不会太多。

要设计数据库,就不得不了解MYSQL数据表的一些基本类型,我在以前的文章里也介绍过,只是今天在这里我会介绍的更详细一点。MYSQL支持多种数据表类型,比较重要和使用的多的表类型是:myisam,innodb,heap三种。

如果在创建数据库的时候,没有指定表的类型,一定是根据mysql的配置文件中:default-table-type这个选项来决定的,基本上,大多数的设定都是myisam,也有可能是innodb,但几乎可以肯定不会是heap,如果有,那实在是太妖了。

今天有点晚了,先介绍一下myisam类型的表的特点吧,明天再介绍其他的。

myisam的最大特点就是成熟、稳定和易于管理,这种类型也是mysql所特有的。并且,如果没有其他什么特殊应用,如事务等,一般建议是选用这种类型的表结构。

虽然大家都了解myisam,并且在实际应用中也正在使用这种类型的表结构,但恐怕你不知道的是,即使是myisam结构,也会为三种类型:

1、myisam static(静态myisam),一般来说,如果数据表的数据列各自都有预先定义好的固定长度,服务器会自动选用这种类型。该类型的存储、读取效率非常高,即使是大量的CRUD操作(只是为了方便,因为R是读取,删了R的话,又是一个新名词,所以还是把R放在了里面)也是如此。同时,该类型的表结构安全性很高,即使出现文件受损或其他问题,数据记录的提取和恢复工作也比其他类型的数据表更容易。

2、myisam dynamic(动态myisam),这个就相对比较好解释了,凡是数据表结构里有varchar字段的,服务器就会自动选用这种类型。优点是:与静态myisam相比,本类型所占用的数据空间会小上很多,在存储字符串和二字制数据时所需要的字节数也往往就是它们的实际长度(或许会额外多出几个字节的开销)。缺点是,这样会造成每行数据的记录长度会不一致,如果数据在进行更新或删除操作的时候,很容易就会在原先存储这些数据的地方形成空洞,造成空间的浪费,而且还会造成数据的不连续,并分散在各处。当数据碎片越来越多的时候,数据的存取时间也就会越来越长。因此,就有了一个单独的方法:optimize table或者其他专门的工具来对数据表进行优化

3、myisam compressed(压缩型myisam),以上两种类型都可以使用myisamchk工具进行压缩,一般来说,压缩后的数据库占用空间大多仅为原来大小的一半(当然这也于数据库存储的内容有关)。虽然以后在读取他们的时候需要先进行解压缩操作,但在“低速硬盘+高速CPU”的系统上,数据表的访问会变得极快。然而,这种类型的表有一个非常致命的缺点,即它们是只读的,不能进行任何写操作。

今天先介绍到这里,明天继续往下讲。希望会给大家带来帮助。

思维决定出路

思维决定出路

其实我要讲的并非什么大道理,而是我在读者上看到的一篇文章。内容大概讲的是文章作者(简称作者)乘大巴回杭州,让大巴司机在城北的某个路口放他下来——因为如果乘到终点站,那他到家的路程比从那个路口回到家中的路程远的多。

刚下车,就有一出租车过来。上车后,司机说:这路口每天晚上都有从大巴下来的顾客,在这里等是一等一个准。如果去车站的话,那边同行太多,和他们抢生意,不一定能抢得过。而现在这样,运气好的话,一天可以赚两天的钱。作者非常感慨,认为司机非常会做生意。不料司机说,这是他老婆教她的。

说到这里,或许有人在猜想,这。。。。怎么和以前那个了出租车MBA的故事很象?但事实并不是这样。

司机说他老婆不是开出租的,是擦鞋的,一天赚的钱是同行的四五倍。作者不信,于是司机一一道来:

他老婆每天起早,先到汽车客运站,有很多人等车,很无聊,这时候正好擦擦皮鞋。8、9点的时候,擦鞋的多了,她就到洗车店那里去,帮那些在洗车并且很无聊的人擦皮鞋,11点左右去车站附近的小饭店,那些在等上菜的人,也可能会擦皮鞋。下午1点多人少的时候,再去洗车店。再晚一点的时候,去写字楼门口,那些想去约会的小青年也会去擦擦皮鞋。

故事就这样结束了,虽然我认为事情可能是虚构的,但讲的道理也是有的:大多数人在做的事情,要么抢在他们前面,要么就干脆放弃。

顺便再讲个网上关于白领的新定义:今天发薪水,交了房租、水电费,买了油、米、煤气和泡面,摸摸口袋,感慨一下,这个月工资又白领了。

phpoo.com邮箱申请

phpoo.com邮箱申请

phpoo.com邮箱可以申请了,现在用的是google的服务,但我目前没有办法把cname等指向http://mail.phpoo.com,所以有点郁闷,现在只能通过:https://mail.google.com/a/phpoo.com/来访问,如果有需要申请的朋友,可以和我联系,好象不能直接注册的。

呵呵。尝试改成可以mail.phpoo.com能够访问。如果还是不行,考虑换到live.com上去,但,据说是不支持国内的?不清楚,啥时候问问流年,因为thinkphp.cn的邮箱好象就是用live邮箱搞的

群中偶得一笑话,与诸位分享

今日在QQ群中闲逛,听得群友胡侃天地,偶得一笑谈,与诸君共享。

上周六,云高气爽。吾心愉,遂往颐和园。由东门入,行至十七孔桥。后舟至石舫,穿竹林,越沟桥,至四方院落,购肉肠若干,面一桶,吾至饿,故速食之。出院落,行百余步,忽现一庙堂,奇之,遂入!堂内仙女般MM若干,左右依壁各一龙座,一MM见吾左顾右盼,忽披一龙袍于吾身,摁于龙座之上,"皇上勿动!" "喀嚓!" 吾顿觉双眼恍惚,忽觉手中有温软之物,定神视之,见MM玉手攥与吾手之中,吾汗!须臾之间 "喀嚓",吾双目恍惚again,未及清醒,忽闻一MM呼:"喂,你自己照的10块,和哀家合照40,一共50,掏钱!"

一笑了之

9月份编程语言排行榜发布-Delphi王者归来

新闻来源:cnbeta.com

TIOBE编程语言9月份榜单发布,Delphi经过几个月持续上升后终于返回前10名,Ruby下降一位排名第11.
Position
Sep 2008
Position
Sep 2007
Delta in Position Programming Language Ratings
Sep 2008
Delta
Sep 2007
Status
1 1 Java 20.715% -0.99% A
2 2 C 15.379% +0.47% A
3 5 C++ 10.716% +0.78% A
4 3 (Visual) Basic 10.490% -0.26% A
5 4 PHP 9.243% -0.96% A
6 8 Python 5.012% +1.99% A
7 6 Perl 4.841% -0.58% A
8 7 C# 4.334% +0.75% A
9 9 JavaScript 3.130% +0.41% A
10 14 Delphi 3.055% +1.83% A
11 10 Ruby 2.762% +0.70% A
12 13 D 1.265% -0.11% A
13 11 PL/SQL 0.700% -1.16% A--
14 12 SAS 0.640% -0.76% B
15 23 ActionScript 0.472% +0.07% B
16 16 Lisp/Scheme 0.419% -0.21% B
17 18 Lua 0.415% -0.16% B
18 22 Pascal 0.400% -0.03% B
19 - PowerShell 0.384% 0.00% B
20 17 COBOL 0.360% -0.27% B
前10名其他语言排位没有变化。

佛家思想与PHP开发

今天听了点课,感悟还是有点的。软件开发会时不时的遇到点瓶颈,这其实与佛家思想还是有点关系的,当然,也许是我硬套上的吧。

佛家参惮有一种说法:看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水。这里说的是佛家修行的三个层次,也叫三重境界,即初期看山是山,中期有悟时,山就不再是简单的山了,最后彻悟,返朴归真,山还是山,但已经不是原来的那个山了,升华了,空灵了。把这用在游记上也是很合适的。走马观花,照象机式的记录,见山是山,见水是水,见什么写什么,流水帐,千篇一律,大同小异,这是初级阶段。再上一个层次,进到文学的创作,那就得看山不是山,看水不是水。那是什么?是山水背后的东西,附在山水之上的东西,山不再是单纯岩石泥土加草木的立体,水也不是简单的流动的液体了。

软件开发也差不多,刚开始学程序的时候,看山是山,因为这时候思想还没有成形,对于程序的理解都是停在表面上,没有什么特别的概念。随着编程时间的增长,和能力的进步,这时候看待程序、架构都比较的深层次了,于是就升级成为看山不是山,看水不是水的境界。这道坎其实很难跨越,等到真正跨越这一层,然后所以的编程语言、架构在眼里又变成那样的浅显,于是又回到了最初的看山是山看水是水的境界。

随便说说而己。不必生搬硬套

开发人员的七种心态——支付宝杨云

开发人员的七种心态——支付宝杨云

今天下午和同事参加了ThinkSite举办的技术交流会,期间由某知名猎头公司猎头进行了行业介绍和职业规划简介,但最关心的还是支付宝架构师杨云的介绍。

杨云认为:

1、开发者应当尝试不同的应用开发,以便可以了解、熟悉各种流程。
2、始终保持初学者心态。在看到别人的开发、代码时,不管怎么样,总应该抱着学习的心态,不能因为自己在某领域强过别人就对别人采用批判的眼光。三人行必有我师。达者为先。讲的都是这种道理吧。
3、建立完善的学习体系。当你看到或者搜索到你需要的代码或者程序时,不应该存着拿来主义,而应该做到知其然,并知其所以然。只有这样,你才是真正的学习到了东西,否则永远就只是处在代码层阶段,而永远无法深入。
4、少用工具代替思考,工具之所以是工具,只是为了方便开发,而不能将工具代替你自身的思考。开发过程中,总会出现这样那样的BUG,工具只是方便你将BUG定位,而不一定能完整的将BUG查找出来,这时候不能完全依赖工具,而应该检查自己的代码。
5、不要错过向高手学习的机会。记住,是主动向高手学习。生活当中、开发当中,遇到高手的机会可能会很多,但能不能抓住机会向别人请教,那就要靠自己了。毕竟,别人不会主动问你有什么不会的。
6、搞清技术的来龙去脉。编程技术的发展经历了大约三十年左右,在这三十年里,产生了各种不同的思想,也有很多人根据同样的思想而发展出了不同的派系,只有了解清楚该项技术产生的背景,就不会让你在选择的时候感到迷惑。举例说AJAX,本来就是属于一个很老的技术,但现在ajax的框架有一大堆,你会选择哪个?如果你自己真正的了解了AJAX的核心的内容,你还会在于你选择哪一个吗?当然你在分析不同的代码后,可能会选择一个你认为相对效率较高的一样,可是这也证明了你基本搞清楚它的来龙去脉 了。
7、形成自己的开发的世界观。相信自己,不要迷惑,要有自己的世界观。这是杨云的意见和建议。个人还是认为:世界观、人生观、价值观,这虽然是在初中学政治的时候用到,但用在开发上,也确实有它的独到之处。这三个观念树立好,也可以使自己在往后的开发生涯中不会感到迷惘。这可是自己选择的路。。。。

附上杨云的演讲形象:

29cd0a76a415a69ccddd400f8911d926

会后,多人对世界观提出了自己的看法,当然我的看法就在上面。同时参与了一些讨论,感慨于目前的培训机构和培训人员及被培训人员的思维。虽然谈了不少,但总感觉少了点什么?文人相轻,在搞技术的人身上也能得到完美的体现。或许就其实就是杨云所说的第二条吧。没有一个初学者的心态,如何能够正确树立和形成一个完善的软件开发世界观?

学习,沉淀,尽可能的帮助其他人,或者这也是程序员的一种快乐吧。如果这种快乐能够被传递,那才是一件很快乐的事。

指标决定PV

指标决定PV

雅虎统计的综合统计出来一个:昨日访客粘度指标, 这个指标可以让我们大致了解来我们网站的到底是哪些人,有多少人经常访问,有多少人是一次性的游客。

我本不知道这点,一大早同事发消息给我说本来想写关于粘度的文章结果就发现了。于是看了一下,发现自己的指标值其实很低。

回头客总量: 20 当日回头率: 3.64% 平均停留时间: 349.6秒 平均访问页数: 1.35页 唉,看来,我的博客并不是如想象中的吸引人啊,PV量不高看来也情有可原,不过,既然知道了这样的指标,也可以作为检验我的网站的指标嘛。
有目标就有动力,以后我会少摘 点东西,多写点自己的东西和心得吧——虽然水平很臭。
消息称MySQL创始人已向Sun提交辞呈

消息称MySQL创始人已向Sun提交辞呈

新闻来源:新浪科技

知情人士透露,MySQL创始人迈克尔·维德纽斯(Michael Widenius)昨日已向Sun递交了辞呈。维德纽斯是开源数据库软件MySQL核心开发人员。今年1月,Sun宣布以10亿美元收购MySQL。维德 纽斯辞职后,MySQL另一名重要开发人员布莱恩·阿克尔(Brian Aker)很可能接替维德纽斯的工作。

7月底,阿克尔刚刚发布面向Web 2.0的简化版MySQL“Drizzle”。

单位培训了MYSQL

单位今天请MYSQL公司的人来进行了简单的辅导和介绍。上午的我没有参加,下午的因为涉及到了一些SQL优化之类的,同事让我也听听学习学习。

一开始的时候讲了一大堆存储的事,可惜都是那种很空洞的感觉。不过想想也是,这种利用PPt来进行介绍的,怎么可能介绍的很详细,当时就有一种受骗的感觉。呵呵

这种课程听的再多恐怕也是和没听没啥区别吧。

唯一有印象的就是,数据库的设计规范,但也没有讲什么具体的,只是简单的说了一下:
1、能用int的,坚决不用bigint
2、如果能够基本确定长度,那就写上固定的varchar(10),而不是varchar(255),虽然最终存储的长度一样。
3、不要随便为某个字段增加索引,可以通过一句SQL来分析一下表(汗,忘了是什么命令了。啥时候有空翻翻手册应该就知道了)
4、如果可能,请尽量为字段设定NOT NULL(毕竟使用BTree的索引时,NULL是不在检索范围之内的)

反正,就感觉,我们里面的一些同事设计的表,完全符合他提出的这些问题,我好满足啊。他们主动要求,表一定要default NULL。

还有对我有印象的就是,如果某字段的值几乎一致,比如:a_123,a_456,建议使用前缀索引(MYSQL4好象没有这个?)不过确实这个从来没有注意过。。。

其他的什么分表存储,水平,垂直,都只是空泛的介绍。而没有实质性的东西。。。

当然,主要是因为这其中的大部分知识,我还是略有所知的。。。

总算还是略有收获,没有完全浪费1小时左右的时间。不过,这位介绍人员的介绍有点生疏,黑黑。。。害羞?还是初次从后台走向前台?不得而知。。。