一、需要设置一个有效期为31天,的memcache值,请补充下面的代码
代码语言:javascript复制<?php
$memcache_obj=new memcache
$memcache_obj->connect(‘memcache_host,11211’);
$memcache_obj->set(‘varKey’,’varValue’,0,____);
?>
答案:31243600
二、请对语句select * from tableExample where ((a and b) and c or (((a and b ) and (c and d)))进行优化的语句。
代码语言:javascript复制答案:select * from tableExample where (a and b and c) or (a and b and c and d);
三、_____函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的。
答案:debug_backtrace()
四、现在请你设计一个留言板系统,请简要的写出你设计的其中分页算法的思路.
答案:1.可以通过count(*)来得到记录总条数
2.将总条数除以每页显示条数取整得到分页数
3.点击下一页的链接进行传值,将传值拼装成where条件
4.显示相应数据
或者
一个简单的数据库的增删改查的留言版,分页的设计思路,即是每次进行查询所发送的参数不同,从数据库中得到不同数据,在sql语句中用limit动态设置偏移量。偏移量可以通过判断和叠加的方式而改变。而总页数可以是,返回的总行数除以每页显示的条数之后取整。如果是一个文件写入的留言版,则可以将取出的内容拆分成数组,后设置偏移量取出不同的元素。
五、数据库中的事务是什么?
答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成, 事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
六、优化MYSQL数据库的方法。
答: 1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如'省份,性别',最好设置为ENUM
2、使用连接(JOIN)来代替子查询:
代码语言:javascript复制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
3、使用联合(UNION)来代替手动创建的临时表
代码语言:javascript复制a.创建临时表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`
4、事务处理:
a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败
代码语言:javascript复制mysql_query("BEGIN");
mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";
mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");
mysql_query("COMMIT");
5、锁定表,优化事务处理:
a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前,不会有其它的访问来对 inventory 进行插入、更新或者删除的操作
代码语言:javascript复制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");
6、使用外键,优化锁定表
a.把customerinfo里的customerid映射到orderinfo里的customerid,任何一条没有合法的customerid的记录不会写到orderinfo里
代码语言:javascript复制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;
7、建立索引:
a.格式:(普通索引)
创建:CREATE INDEX <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
创建表指定索引:CREATE TABLE tablename([...],INDEX索引名[1])
(唯一索引)
创建:CREATE UNIQUE <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
创建表指定索引:CREATE TABLE tablename([...],UNIQUE索引名[2])
(主键) 它是唯一索引,一般在创建表的格式为:
CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
8、优化查询语句
a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
例子1:
代码语言:javascript复制SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)
SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
例子2:
代码语言:javascript复制SELECT * FROM order WHERE addtime/7<24;(慢)
SELECT * FROM order WHERE addtime<24*7;(快)
例子3:
代码语言:javascript复制SELECT * FROM order WHERE title like "%good%";
SELECT * FROM order WHERE title>="good" and name<"good";
选取最适用的字段属性 尽量减少字段的长度 设置为not null
使用join代替子查询
使用union代替手动创建临时表
使用并优化事物处理
使用外键
使用索引
优化查询语句