mysql必知必会

  1. SELECT prod_name FROM products LIMIT 5,5;(从行5开始选择5条数据,行是从0开始的) 

  • ORDER BY 

  1. SELECT prod_name FROM product ORDER BY prod_name/ DESC;(将按照prod_name排序检索)/加DESC表示降序

  2. SELECT prod_id,prod_price,prod_name FORM products ORDER BY prod_price,prod_name(先按照price排序再按照name排序)

  3. SELECT prod_name FROM product ORDER BY prod_price DESC,prod_name;(DESC关键字只应用到直接位于其前面的列明,只对price列DESC,对name列不指定)

  4. SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;(搜索最昂贵的产品,limit要再order by之后,注意order by要在where之后)

  • where 

  1. where不区分大小写

  2. SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;(搜索介于5到10的区间用between,是闭区间)

  3. SELECT prod_name FROM products WHERE prod_price IS NULL(用IS NULL来查询空值)

  4. 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)

  • 计算字段

  1. SELECT Concat(vend_name,'(',vend_country,')')FROM vendors ORDER BY vend_name;concat将两个字段拼接

  • 分组 GROUP BY

GROUP BY字句必须出现再WHERE字句之后,ORDER BY字句之前。/where过滤行而having过滤分组

  1. SELECT cust_id,COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >=2;HAVING在GROUP BY后面,作用类似于where

  2. SELECT vend_id,COUNT(*) AS num_prods FROM porducts WHERE prod_price >=10 GROUP BY vend_id HAVING BY COUNT(*) >= 2;先用where过滤所有的行,在用group by过滤分组

  3. SELECT 字句顺序 SELECT ,FROM ,WHERE ,GROUBP ,BY, HAVING ,ORDER ,BY ,LIMIT

  • 子查询

  1. SELECT cust_id FROM orders WHERE order_num IN(SELECT order_num FROM orderitems WHERE prod_id = 'TNT2')用IN来实现子查询,类似于OR

  • 表联接

  1. SELECT customers.cust_id,orders.order_num FROM customers INNER JOIN orders ON customers.cust_id = orders.cust_id;

  2. SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;内外联接

  • UPDATE,DELETE

  1. 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE与DELETE语句。

  2. 保证每个表都有主键

  3. 在对UPDATE或DELETE语句使用WHERE子句之前,应该先用SELECT进行预测,保证它过滤的信息是正确的

  • 数据库引擎

  1. InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索

  2. MEMORY在功能上等同于MyISAM,但由于数据存储在内存而不是磁盘中,速度很快,特别适合临时表

  3. MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理

  4. 外键不能跨引擎

  • 更新表

  1. ALTER TABLE vendors ADD vend_phone CHAR(20);为表增加一列

  2. ALTER TABLE vendors DROP COLUMN vend_phone;删除一列

  3. 注意使用ALTER修改表之前应该进行备份

  • 事务处理

  1. 事务处理可以用来维护数据库的完整性,它保证成批的Mysql操作要么完全执行,要么完全不执行,事务是一种机制,用来管理必须成批执行的mysql操作,以保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,他们或作为整体执行,或者完全不执行。如果没有发生错误,整组语句提交给数据库表。如果发生错误,则进行回退以恢复数据库到某个已知的安全状态。

  2. 事务处理用来管理INSERT,UPDATE,DELETE不用回退CREAT或DROP

你可能感兴趣的:(mysql必知必会)