“PHP学习网” 公众号会天天分享一些面试题,正在找工做的小伙伴们能够来看看哦。
<?php $memcache_obj=new memcache $memcache_obj->connect(‘memcache_host,11211’); $memcache_obj->set(‘varKey’,’varValue’,0,____); ?>
答案:31243600php
答案:select * from tableExample where (a and b and c) or (a and b and c and d);
答案:debug_backtrace()mysql
答案:
1.能够经过count(*)来获得记录总条数面试
2.将总条数除以每页显示条数取整获得分页数redis
3.点击下一页的连接进行传值,将传值拼装成where条件算法
4.显示相应数据sql
或者数据库
一个简单的数据库的增删改查的留言版,分页的设计思路,便是每次进行查询所发送的参数不一样,从数据库中获得不一样数据,在sql语句中用limit动态设置偏移量。偏移量能够经过判断和叠加的方式而改变。而总页数能够是,返回的总行数除以每页显示的条数以后取整。
若是是一个文件写入的留言版,则能够将取出的内容拆分红数组,让后设置偏移量取出不一样的元素。数组
答:事务(transaction)是做为一个单元的一组有序的数据库操做。若是组中的全部操做都成功,则认为事务成功,即便只有一个操做失败,事务也不成功。若是全部操做完成,
事务则提交,其修改将做用于全部其余数据库进程。若是一个操做失败,则事务将回滚,该事务全部操做的影响都将取消。安全
答:
一、选取最适用的字段属性,尽量减小定义字段长度,尽可能把字段设置NOT NULL,例如'省份,性别',最好设置为ENUM函数
二、使用链接(JOIN)来代替子查询:
a.删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo) b.提取全部没有订单客户:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo) c.提升b的速度优化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid WHERE orderinfo.customerid IS NULL
三、使用联合(UNION)来代替手动建立的临时表
a.建立临时表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`
四、事务处理:
a.保证数据完整性,例如添加和修改同时,二者成立则都执行,一者失败都失败
mysql_query("BEGIN"); mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')"; mysql_query("SELECT * FROM `orderinfo` where customerid=".$id"); mysql_query("COMMIT");
五、锁定表,优化事务处理:
a.咱们用一个 SELECT 语句取出初始数据,经过一些计算,用 UPDATE 语句将新值更新到表中。
包含有 WRITE 关键字的 LOCK TABLE 语句能够保证在 UNLOCK TABLES 命令被执行以前,不会有其它的访问来对 inventory 进行插入、更新或者删除的操做
mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE"); mysql_query("SELECT customerid FROM `customerinfo` where id=".$id); mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where customerid=".$id); mysql_query("UNLOCK TABLES");
六、使用外键,优化锁定表
a.把customerinfo里的customerid映射到orderinfo里的customerid,任何一条没有合法的customerid的记录不会写到orderinfo里
CREATE TABLE customerinfo ( customerid INT NOT NULL, PRIMARY KEY(customerid) )TYPE = INNODB; CREATE TABLE orderinfo ( orderid INT NOT NULL, customerid INT NOT NULL, PRIMARY KEY(customerid,orderid), FOREIGN KEY (customerid) REFERENCES customerinfo (customerid) ON DELETE CASCADE )TYPE = INNODB;
注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order表中的该用户的全部记录,注意使用外键要定义事务安全类型为INNODB;
七、创建索引:
a.格式:(普通索引)
建立:CREATE INDEX <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],INDEX索引名)
(惟一索引)
建立:CREATE UNIQUE <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],UNIQUE索引名)
(主键)
它是惟一索引,通常在建立表是创建,格式为:
CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
八、优化查询语句
a.最好在相同字段进行比较操做,在创建好的索引字段上尽可能减小函数操做
例子1:
SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢) SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
例子2:
SELECT * FROM order WHERE addtime/7<24;(慢) SELECT * FROM order WHERE addtime<24*7;(快)
例子3:
SELECT * FROM order WHERE title like "%good%"; SELECT * FROM order WHERE title>="good" and name<"good";
选取最适用的字段属性 尽可能减小字段的长度 设置为not null
使用join代替子查询
使用union代替手动建立临时表
使用并优化事物处理
使用外键
使用索引
优化查询语句
最后各位能够扫下方二维码关注我公众号,目前我正在更新基础面试题,以后会更新中高级、redis、liunx面试题