background image

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)来代替手动创建的临时表

a.创建临时表:SELECT name FROM `nametest` UNION SELECT username

FROM `nametest2`
4、事务处理:

a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败
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 进行插入、更新或者删除的操作

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 里

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