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