-
SELECT prod_name FROM products LIMIT 5,5;(从行5开始选择5条数据,行是从0开始的)
-
ORDER BY
-
SELECT prod_name FROM product ORDER BY prod_name/ DESC;(将按照prod_name排序检索)/加DESC表示降序
-
SELECT prod_id,prod_price,prod_name FORM products ORDER BY prod_price,prod_name(先按照price排序再按照name排序)
-
SELECT prod_name FROM product ORDER BY prod_price DESC,prod_name;(DESC关键字只应用到直接位于其前面的列明,只对price列DESC,对name列不指定)
-
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;(搜索最昂贵的产品,limit要再order by之后,注意order by要在where之后)
-
where
-
where不区分大小写
-
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;(搜索介于5到10的区间用between,是闭区间)
-
SELECT prod_name FROM products WHERE prod_price IS NULL(用IS NULL来查询空值)
-
SELECT prod_name,prod_price FROM products WHERE (vend_id = 1002 OR vend_id = 1003) ORDER BY prod_name;与SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;(IN与OR等价,优先使用IN)
-
计算字段
-
SELECT Concat(vend_name,'(',vend_country,')')FROM vendors ORDER BY vend_name;concat将两个字段拼接
-
分组 GROUP BY
GROUP BY字句必须出现再WHERE字句之后,ORDER BY字句之前。/where过滤行而having过滤分组
-
SELECT cust_id,COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >=2;HAVING在GROUP BY后面,作用类似于where
-
SELECT vend_id,COUNT(*) AS num_prods FROM porducts WHERE prod_price >=10 GROUP BY vend_id HAVING BY COUNT(*) >= 2;先用where过滤所有的行,在用group by过滤分组
-
SELECT 字句顺序 SELECT ,FROM ,WHERE ,GROUBP ,BY, HAVING ,ORDER ,BY ,LIMIT
-
子查询
-
SELECT cust_id FROM orders WHERE order_num IN(SELECT order_num FROM orderitems WHERE prod_id = 'TNT2')用IN来实现子查询,类似于OR
-
表联接
-
SELECT customers.cust_id,orders.order_num FROM customers INNER JOIN orders ON customers.cust_id = orders.cust_id;
-
SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;内外联接
-
UPDATE,DELETE
-
除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE与DELETE语句。
-
保证每个表都有主键
-
在对UPDATE或DELETE语句使用WHERE子句之前,应该先用SELECT进行预测,保证它过滤的信息是正确的
-
数据库引擎
-
InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索
-
MEMORY在功能上等同于MyISAM,但由于数据存储在内存而不是磁盘中,速度很快,特别适合临时表
-
MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理
-
外键不能跨引擎
-
更新表
-
ALTER TABLE vendors ADD vend_phone CHAR(20);为表增加一列
-
ALTER TABLE vendors DROP COLUMN vend_phone;删除一列
-
注意使用ALTER修改表之前应该进行备份
-
事务处理
-
事务处理可以用来维护数据库的完整性,它保证成批的Mysql操作要么完全执行,要么完全不执行,事务是一种机制,用来管理必须成批执行的mysql操作,以保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,他们或作为整体执行,或者完全不执行。如果没有发生错误,整组语句提交给数据库表。如果发生错误,则进行回退以恢复数据库到某个已知的安全状态。
-
事务处理用来管理INSERT,UPDATE,DELETE不用回退CREAT或DROP