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仍然不同于内部数据库,解决方案提供商必须认识到这一点;否则,他们不仅仅是丢失几个客户,而是要失去的更多。 而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~ 比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。 再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。 至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。 然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情 其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。 始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。 作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
页:
[1]