莫相离 发表于 2015-1-8 11:48:47

13个PHP程序员应当掌握的MySQL技能

本帖最后由莫相离于2015-1-811:52编辑



关于大多数web运用来说,那么你很也许也在运用MySQL—LAMP系列中无足轻重的一份子。
关于许多菜鸟们来说,构建一个安稳牢靠的数据库却需求花上一些时日和有关技术。有些相同也反映在其他言语运用上。
因为其体积小、速度快、整体具有本钱低,尤其是开放源码这一特色,很多中小型网站为了下降网站整体具有本钱而选择了MySQL作为网站数据库。
1.MyISAM不是InnoDB
  MySQL有许多引擎,可是你最也许碰到的即是MyISAM和InnoDB。
  MySQL默许运用的是MyISAM。可是,许多情况下这都是一个很差劲的选择,除非你在创立一个十分简略抑或实验性数据库。外键束缚或许事务处理关于数据完整性是十分重要的,但MyISAM都不支撑这些。别的,当有一条记载在刺进或许更新时,全部数据表都被确定了,当运用量增加的时分这会发生十分差的运转功率。
  定论很简略:运用InnoDB。2.PHP的mysql
  PHP自发生之日就供MySQL库函数(ornearasmakesnodifference)。但仍然在运用相似mysql_connect、mysql_query、mysql_fetch_assoc等的函数,尽管PHP手册上说:
  假如你在运用MySQLv4.1.3或许更新版别,强烈推荐运用您运用mysqli拓展。
  mysqli(MySQL的加强版拓展)有以下几个长处:
  可选的面向目标接口
  prepared表达式,这有利于阻止SQL写入进犯,还能进步功能
  支撑更多的表达式和事务处理
  别的,假如你想支撑多种数据库,你还能够思考PDO。3.处理用户输入
  这或许能够这样说#1:永久不要信任用户的输入。用服务器端的PHP验证每个字符串,不要寄希望与JavaScript。最简略的SQL写入进犯会运用如下的代码:
  $username=$_POST["name"];
  $password=$_POST["password"];
  $sql=“SELECTuseridFROMusertableWHEREusername=’$username’ANDpassword=’$password’;”;
  //runquery…
  只要在username字段输入”admin’;–”,这样就会被黑到,相应的SQL句子如下:
  SELECTuseridFROMusertableWHEREusername=’admin’;
  奸刁的黑客能够以admin登录,他们不需求知道暗码,由于暗码段被注释掉了。4.运用UTF-8
  美国、英国和澳大利亚的咱们很少思考除英语之外的其他言语。咱们很满意地完成了自个的”杰作”却发现它们并不能在其他地方正常运转。
  UTF-8处理了许多国际化疑问。尽管在PHPv6.0之前它还不能极好地被支撑,但这并不影响你把MySQL字符集设为UTF-8。5.偏心PHP
  假如你触摸MySQL不久,那么你会倾向于运用你现已掌握的言语来处理疑问,这样会致使写出一些冗余、低功率的代码。比方,你不会运用MySQL自带的AVG()函数,却会先对记载会集的值求和然后用PHP循环来核算平均值。
  此外,请注意PHP循环中的SQL查询。一般来说,履行一个查询比在结果中迭代更有功率。
  所以,在剖析数据的时分请运用数据库系统的优势,懂一些SQL的知识将大有裨益。6.优化数据库查询
  99%的PHP功能疑问都是由数据库导致的,只是一个差劲的SQL查询就能让你的web运用完全瘫痪。MySQL的EXPLAINstatement、QueryProfiler,还有许多其他的工具将会协助你找出这些万恶的SELECT。7.准确运用数据类型
  MySQL供给了比方numeric、string和date等的数据类型。假如你想存储一个时间,那么运用DATE或许DATETIME类型。假如这个时分用INTEGER或许STRING类型的话,那么将会使得SQL查询十分复杂,条件是你能运用INTEGER或许STRING来定义那个类型。
  许多人倾向于私行自定义一些数据的格局,比方,运用string来存储序列化的PHP目标。这样的话数据库管理起来也许会变得简略些,但会使得MySQL变成一个差劲的数据存储并且以后很也许会导致毛病。8.查询中运用*
  永久不要运用*来回来一个数据表一切列的数据。这是懒惰:你应当获取你需求的数据。就算你需求一切字段,你的数据表也不可避免的会发生改变。9.运用索引或许过度运用索引
一般性原则是这样的:select句子中的任何一个where子句表明的字段都应当运用索引。
举个比如,假定咱们有一个user表,包括numericID(主键)和emailaddress。登录的时分,MySQL有必要以一个email为根据查找准确的ID。假如运用了索引的话(这儿指email),那么MySQL就能够运用更快的搜索算法来定位email,乃至能够说是即时完成。不然,MySQL就只能次序地查看每一条记载直到找到准确的emailaddress。
有的人会在每个字段上都增加索引,惋惜的是,履行了INSERT或许UPDATE以后这些索引都需求从头生成,这样就会影响功能。所以,只在需求的时分增加索引。10.忘记备份
尽管对比罕见,但数据库仍是有溃散的风险。硬盘有也许损坏,服务器有也许溃散,web主机供给商有也许会破产!丢掉MySQL数据将会是灾难性的,所以请保证你现已运用了主动备份或许现已仿制到位。
11.Bonusmistake-不思考运用其他数据库。
关于PHP开发人员来说,MySQL也许是运用最广泛的数据库,但并不是仅有的选择。PostgreSQL和Firebird是最强有力的竞争者:这个两者都是开源的,并且都没有被公司收买。微软供给了sqlserverExpress,甲骨文供给了10gExpress,这两者都是企业级数据库。关于一个较小的web运用或许嵌入式运用,SQLite也不失为一个可行的代替方案。12.服务器错误信息来自下述源文件:
错误消息信息列在share/errmsg.txt文件中。“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代。
错误值列在share/errmsg.txt文件中,用于生成include/mysqld_error.h和include/mysqld_ername.hMySQL源文件中的定义。
SQLSTATE值列在share/errmsg.txt文件中,用于生成include/sql_state.hMySQL源文件中的定义。13.mysql数据库没有启动
这种情况也正是我遇到的,到windows服务选项里查看发现没有mysql数据库服务这个选项,记得刚开始安装mysql的时候是有的。所以这种情况下我重新安装了一下mysql数据库,windows服务里又有这个选项了,重新启动mysql数据库,可以正常连接和使用mysql数据库了。问题解决。

再见西城 发表于 2015-1-16 15:31:15

13个PHP程序员应当掌握的MySQL技能

如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。

若天明 发表于 2015-1-29 13:33:56

varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。

柔情似水 发表于 2015-2-9 02:50:53

微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。

老尸 发表于 2015-2-28 18:15:10

在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。

小妖女 发表于 2015-3-11 18:55:20

微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。

再现理想 发表于 2015-3-20 05:12:25

分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
页: [1]
查看完整版本: 13个PHP程序员应当掌握的MySQL技能