《PHP学习网》公众号每天都会分享一些面试题,找工作的朋友可以看看。1.你需要设置一个memcache值有效期为31天,请添加如下代码'varValue',0,____);?>Answer:312436002.Pleaseselect*fromtableExamplewhere((aandb)andcor(((aandb)and(candd)))优化语句答案:select*fromtableExamplewhere(aandbandc)or(aandbandcandd);3、_____函数可以返回脚本中任意一行调用的函数名,这个函数在调试中也常用于判断错误是如何发生的。答:debug_backtrace()4.现在请设计一个留言板系统,请简单写下你设计的分页算法的思路。答:1.你可以使用count(*)得到总记录数2.用总记录数除以每页显示的记录数,循环得到页数3.点击下一页链接通过价值和考绩s的值组装成where条件4.显示相应的数据或一个简单数据库的增删改查留言板。分页的设计思想是每次查询发送的参数不同,从数据库中获取不同的数据。在sql语句中使用limit来动态设置偏移量。可以通过判断和叠加来改变偏移量。在将返回的总行数除以每页上显示的条数后,可以对总页数进行四舍五入。如果是文件写留言板,可以将取到的内容拆分成一个数组,然后设置偏移量取取不同的元素。5.什么是数据库中的事务?答:事务是以一组有序的项目为单位的数据库操作。如果组内所有操作都成功,则认为交易成功,即使只有一个操作失败,也认为交易不成功。如果所有操作都完成,则提交事务,并且其修改将应用于所有其他数据库进程。如果一个操作失败,事务将被回滚,事务的所有操作的影响将被取消。六、优化MYSQL数据库的方法。答:1.选择最适用的字段属性,尽量减少定义字段的长度,尽量将字段设置为NOTNULL,比如'省,性别',最好设置为ENUM2,使用加入(JOIN)而不是子查询:a。删除没有任何订单的客户:DELETEFROMcustomerinfoWHEREcustomeridNOTin(SELECTcustomeridFROMorderinfo)b。提取所有没有订单的客户:SELECTFROMcustomerinfoWHEREcustomeridNOTin(SELECTcustomeridFROMorderinfo)c.提高b的速度。优化:SELECTFROMcustomerinfoLEFTJOINorderidcustomerinfo.customerid=orderinfo.customeridWHEREorderinfo.customeridISNULL3.使用联合(UNION)代替手动创建的临时表a。创建临时表:SELECTnameFROM`nametest`UNIONSELECTusernameFROM`nametest2`4、事务处理:a.保证数据的完整性,比如同时添加和修改,如果两者都成立,则两者都执行,如果一个失败,则失败。mysql_query("BEGIN");mysql_query("INSERTINTOcustomerinfo(name)VALUES('$name1')";mysql_query("SELECT*FROM`orderinfo`wherecustomerid=".$id");mysql_query("COMMIT");5.锁定表并优化事务处理:a.我们使用一条SELECT语句来获取初始数据,通过一些计算,将新值更新到带有UPDATE语句的表中。包含WRITE关键字的LOCKTABLE语句可以保证在UNLOCKTABLES命令执行前不会有其他访问权限对库存进行插入、更新或删除操作mysql_query("LOCKTABLEcustomerinfoREAD,orderinfoWRITE");mysql_query("SELECTcustomeridFROM`customerinfo`whereid=".$id";mysql_query("UPDATE`orderinfo`SETordertitle='$title'wherecustomerid=".$id);mysql_query("UNLOCKTABLES");6.使用外键优化锁表a.将customerinfo中的customerid映射到orderinfo中的customerid,任何没有有效customerid的记录都不会写入orderinfo,customeridINTNOTNULL,PRIMARYKEY(customerid,orderid),FOREIGNKEY(customerid)REFERENCEScustomerinfo(customerid)ONDELETECASCADE)TYPE=INNODB;注:'ONDELETECASCADE',该参数确保当customerinfo中有记录时表被删除,该用户在订单表中的所有记录将同时被删除。注意使用外键时,事务安全类型必须定义为INNODB;7.创建索引:格式:(普通索引)创建:CREATEINDEX<索引名称>ON表名(索引字段)修改:ALTERTABLE表名ADDINDEX[索引名称](索引字段)创建表指定索引:CREATETABLEtablename([...],INDEXindexname)(uniqueindex)创建:CREATEUNIQUE
