1.每行命令以分号(;)结束对于MySQL,首先要记住的是它的命令的每一行都以分号(;)作为结束,但是当MySQL的一行插入到PHP中时代码中,***省略下面的分号,例如:mysql_query("INSERTITOtablename(first_name,last_name)VALUES('$first_name',$last_name')");这是因为PHP也以分号结束一行。额外的分号有时会混淆PHP解析器,因此最好省略它。在这种情况下,虽然省略了分号,但是PHP会在执行MySQL命令时自动为你加上。2.使用关联数组访问查询结果。请参阅以下示例:$connection=mysql_connect("localhost","albert","shhh");mysql_select_db("winestore",$connection);$result=mysql_query("SELECTcust_id,surname,firstnameFROMcustomer",$connection);while($row=mysql_fetch_array($result)){echo"ID:t{$row["cust_id"]}n";echo"Surnamet{$row["surname"]}n";echo"Firstname:t{$row["firstname"]}nn";}函数mysql_fetch_array()将查询结果的一行放入一个数组中,可以同时通过两种方式引用,例如cust_id可以在下面使用两种方式同时使用Mode:$row[“cust_id”]或$row[0]。显然,前者比后者更具可读性。多表连续查询时,如果两列名称相同,则必须用别名分隔:SELECTwinery.nameASwname,region.nameASrname,FROMwinery,regionWHEREwinery.region_id=region.region_id;列名的引用是:$row[“wname”]和$row[“rname”]仅在指定表名和列名时引用列名:SELECTwinery.region_idFROMwinery列名的引用是:$row["region_id"]聚合函数的引用是引用名:SELECTcount(*)FROMcustomer;列名的引用是:$row["count(*)"]3.TEXT、DATE、SETdatatypesMySQL数据表的字段必须定义数据类型,这里大概有25个选项,大部分都很直白,省了我很多。不过有几个值得一提,TEXT不是数据类型,虽然有些书可能会这么说,但实际上应该是“LONGVARCHAR”或“MEDIUMTEXT”。DATE数据类型的格式是YYYY-MM-DD,例如:1999-12-08。你可以很方便地使用date函数以这种格式获取当前系统时间:date("Y-m-d")并且,您可以在DATA数据类型之间进行减法以获得天数差异:$age=($current_date-$生日);集合SET是一种很有用的数据类型,有点类似于枚举ENUM,只不过SET可以存储多个值而ENUM只能存储一个值。此外,SET类型最多只能有64个预定义值,而ENUM类型最多可以处理65,535个预定义值。如果您需要一个包含超过64个值的集合,您应该怎么做?这时候就需要定义多个集合来共同解决这个问题。4.使用mysql_unbuffered_query()开发快速脚本。此函数可用于替换mysql_query()函数。主要区别在于mysql_unbuffered_query()在执行查询后立即返回,无需等待或锁定数据库。但是返回的行数不能用mysql_num_rows()函数检查,因为输出结果集的大小是未知的。5、通配符SQL中有两种通配符:“*”和“%”。在不同的情况下使用。例如:如果想查看数据库的所有内容,可以这样查询:SELECT*FROMdbnameWHEREUSER_IDLIKE'%';这里使用了两个通配符。它们的意思相同-都用于匹配任何字符串,但它们用于不同的上下文。“*”用于匹配字段名,“%”用于匹配字段值。另外一个不容易引起注意的地方是“%”通配符需要和LIKE关键字一起使用。还有一个通配符,就是下划线“_”,和上面的意思不同,用来匹配任意单个字符。6.NOTNULL和空记录如果用户没有填写任何内容就按下提交按钮会发生什么?如果您确实需要一个值,您可以使用客户端脚本或服务器端脚本进行数据验证。但是,在数据库中,有些字段是允许留空的,什么都不填。对于这样的记录,MySQL会为它做一些事情:插入值NULL,这是默认的操作。如果你在字段定义中为它声明NOTNULL(当创建或修改这个字段时),MySQL将把这个字段留空,什么也不填充。对于ENUM枚举类型的字段,如果为其声明NOTNULL,MySQL会将枚举集合的第一个值插入到该字段中。也就是说,MySQL将枚举集合的第一个值作为这个枚举类型的默认值。NULL记录和空记录之间存在一些差异。%通配符可以匹配空记录,但不能匹配NULL记录。在某些时候,这种区别会产生意想不到的后果。就我的经验而言,任何字段都应声明为NOTNULL。这样很多SELECT查询语句就可以正常工作了。注意,搜索NULL时,必须使用“IS”关键字,LIKE将无法正常工作。最后要提的是,如果你在添加或修改新的字段之前,数据库中已经有一些记录,那么原来记录中新添加的字段的值可能是NULL,也可能是空的。这也算是MySQL的一个bug,所以在这种情况下,使用SELECT查询要格外小心。
