透明 发表于 2015-1-16 22:38:20

MYSQL编程:PHP中操纵MySQL的一些要注重的成绩

表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。mysql|成绩<P>关于MySQL,第一件你必需切记的是它的每行命令都是用分号(;)作为停止的,但……没有完整相对的事,在这儿也是一样,当一行MySQL被拔出在PHP代码中时,最好把前面的分号省略失落.比方
mysql_query("INSERTINTOtablename(first_name,last_name)VALUES($first_name,$last_name)");
 这是由于PHP也是以分号作为一行的停止的,分外的分号偶然会让PHP的语法剖析器弄不分明,以是仍是省略失落的好。在这类情形下,固然省略了分号,可是PHP在实行MySQL命令时会主动的帮你加上的。
 别的另有一个不要加分号的情形。当你想把要字段的竖者分列显现上去,而不是像一般的那样横着分列时,你能够用G来停止一行SQL语句,这时候就用不上分号了,比方:
SELECT*FROMPENPALSWHEREUSER_ID=1G

2.TEXT、DATE、和SET数据范例
 MySQL数据表的字段必需有界说一个数据范例。这有约莫25种选择,年夜部分都是间接了然的,就未几费口舌了。但有几个有需要提一下。
 TEXT不是一种数据范例,固然大概有些书上是这么说的。它实践上应当是“LONGVARCHAR”大概“MEDIUMTEXT”。
 DATE数据范例的格局是YYYY-MM-DD,好比:1999-12-08。你能够很简单的用date函数来失掉这类格局确当前体系工夫:date("Y-m-d")
 而且,在DATA数据范例之间能够作减法,失掉相差的工夫天数:
$age=($current_date-$birthdate);
 汇合SET是一个有效的数据范例,它和列举ENUM有点类似,只不外是SET可以保留多个值而ENUM只能保留一个值罢了。并且,SET范例最多只可以有64个预定的值,而ENUM范例却可以处置最多65,535个预界说的值。而假如必要有年夜于64个值的汇合,该怎样办呢?这时候就必要界说多个汇合来一同办理这个成绩了。
3.通配符
 SQL的通配符有两种:“*”和“%”。分离用在分歧的情形下。比方:假如你想看到数据库的一切内容,能够像如许来查询:
SELECT*FROMdbnameWHEREUSER_IDLIKE%;
 这儿,两个通配符都被用上了。他们暗示不异的意义??都是用来婚配任何的字符串,可是他们用在分歧的高低文中。“*”用来婚配字段名,而“%”用来婚配字段值。别的一个不简单引发注重的中央是“%”通配符必要和LIKE关头字一同利用。
另有一个通配符,就是下划线“_”,它代表的意义和下面分歧,是用来婚配任何单个的字符的。

4.NOTNULL和空纪录
 假如用户在没有填任何器材的情形下按了submit按钮,会如何呢?假如你的确必要一个值,那末能够用客户端剧本大概服务器端剧本来举行数据考证,这一点在后面已说过了。可是,在数据库中倒是同意一些字段被空出来甚么也不填。对此类记录,MySQL将要为之实行一些事变:拔出值NULL,这是缺省的操纵。
假如你在字段界说中为之声了然NOTNULL(在创建大概修正这个字段的时分),MySQL将把这个字段空出来甚么器材也不填。关于一个ENUM列举范例的字段,假如你为之声了然NOTNULL,MySQL将把列举集的第一个值拔出到字段中。也就是说,MySQL把列举集的第一个值作为这个列举范例的缺省值。
 一个值为NULL的记录和一个空记录是有一些区分的。%通配符能够婚配空记录,可是却不克不及婚配NULL记录。在某些时分,这类区分会形成一些意想不到的成果。就我的履历而言,任何字段都应当声明为NOTNULL。如许上面的SELECT查询语句就可以够一般运转了:
if(!$CITY){$CITY="%";}
$selectresult=mysql_query("SELECT*FROMdbname
WHEREFIRST_NAME=柳
ANDLAST_NAME=如风
ANDCITYLIKE$CITY
");
 在第一行中,假如用户没有指定一个CITY值,那末就会用通配符%来代进CITY变量,如许搜刮时就会把任何的CITY值都思索出来,乃至包含那些CITY字段为空的记录。
 可是假如有一些记录,它的CITY字段值是NULL,这时候成绩就呈现了。下面的查询是不克不及够找到这些字段的。成绩的一个办理举措能够是如许:
if(!$CITY){$CITY="%";}
$selectresult=mysql_query("SELECT*FROMdbname
WHEREFIRST_NAME=柳
ANDLAST_NAME=如风
AND(CITYLIKE$CITYORCITYISNULL)
");
 注重在搜刮NULL时,必需用“IS”关头字,而LIKE时不会一般事情的。
 在最初要提到的是,假如你在到场大概修正一个新的字段之前,数据库中已有了一些纪录了,这时候新到场的字段在本来的记录中的值,多是NULL,也大概为空。这也算是MySQL的一个Bug吧,以是在这类情形下,利用SELECT查询要出格的当心。
如IBM公司最近宣布让渠道合作伙伴分销其SaaS应用程序的新计划。微软认为MySQL学习教程是销售其云计算服务的重要组成部分。然而即使有这种趋势,DBaaS仍然不同于内部数据库,解决方案提供商必须认识到这一点;否则,他们不仅仅是丢失几个客户,而是要失去的更多。

小妖女 发表于 2015-1-19 19:50:32

而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~

飘飘悠悠 发表于 2015-1-28 10:14:01

比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。

仓酷云 发表于 2015-2-5 20:38:18

再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。

柔情似水 发表于 2015-2-13 13:18:24

至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。

灵魂腐蚀 发表于 2015-3-3 21:58:37

然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情

只想知道 发表于 2015-3-11 14:11:58

其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。

冷月葬花魂 发表于 2015-3-18 22:46:07

始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。

若相依 发表于 2015-3-26 19:53:35

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
页: [1]
查看完整版本: MYSQL编程:PHP中操纵MySQL的一些要注重的成绩