一、关键字DISTINCT是做用在全部列上的而不只仅是前置它的列。mysql
二、DESC关键字:若是想在多个列中进行降序排列,必须对每一个列指定DESC关键字。 如:正则表达式
SELECT * FROM table t ORDER BY t.a DESC, t.b DESC, t.c DESC;
三、MySQL在执行匹配时不区分大小写。如WHERE t.name=”fuses”,能够找到fuses、Fuses、fUses等。sql
四、MySQL在搜索匹配(用LIKE和通配符搜索匹配)时,区分大小写。好比:LIKE ’jet%’ 不能匹配到 JetP、jEtPAAA等。安全
五、BETWEEN AND 是开区间。函数
六、SQL中,AND关键字的优先级比OR要高,因此会优先计算,要改变优先级,能够用小括号。sqlserver
七、MySQL中的NOT : MySQL支持使用NOT对IN、BEWTEEN 和 EXSTS 字句取反,这与大多数其它DBMS容许使用NOT对各类条件取反有很大区别。性能
八、AVG()、COUNT()、MIN()、 MAX()忽略NULL行。code
九、为在搜索子句中使用通配符,必须使用LIKE关键字。LIKE指示MySQL后面的搜索模式利用通配符匹配而不是直接相等匹配进行比较。server
十、通配符 (1) % :匹配任何字符出现任意次数。注意%匹配不了NULL;即便使用:select * from user where password LIKE '%',也匹配不了NULL,这个能够语句会报错。 (2) _ (下划线):匹配一个字符(不能多也不能少)。排序
十一、MySQL与正则表达式结合使用,使用关键字REGEXP,如:
select * from user where password REGEXP '0';
十二、LIKE和REGEXP的区别: (1)LIKE匹配整个列; (2)REGEXP在列值内进行匹配; (3)LIKE匹配整个串而REGEXP匹配子串;
1三、注意:MySQL 中的正则表达式匹配(自从3.23.4后)不区分大小写!!为了区分大小写,可使用BINARY关键字,如WHERE p.a REGEXP BINARY ‘hiSaaS’;
1四、多数正则表达式实现使用单个反斜杠(\)转义特殊字符,以便能使用这些字符自己。但MySQL中要求使用两个反斜杠(MySQL解析一个,正则表达式解析另一个)。
1五、正则中“^”有两种用途: (1)用在“[ ]”里面,表示对里面的集合的否认; (2)不然,用做定位符,表示串的开始处。
1六、GROUP BY: (1)若是分组中有NULL值,则将NULL做为一个分组; (2)GROUP BY必须在WHERE以后,ORDER BY以前分组。
1七、WHERE 和 HAVING的区别: (1)WHERE过滤行,HAVING过滤分组,全部的WHERE均可以由HAVING支持; (2)WHERE在数据分组前过滤,HAVING在数据分组后过滤。
1八、SELECT子句的顺序: SELECT、 FROM、 WHERE、 GROUNP BY、 HAVING、 ORDER BY、 LIMIT
1九、应该保证全部联结(如WHERE:a.id = b.id )都有WHERE子句,不然返回的是笛卡尔积的链接类型。
20、联结(如WHERE:a.id = b.id )的表越多,性能越低。
2一、组合查询: (1)有两种两状况须要使用组合查询的:
2二、如何在使用AUTO_INCREMENT列时得到这个值?可以使用last_insert_id()函数得到这个值,如 SELECT last_insert_id();
2三、外键不能跨引擎。外键(用于强制实施引用完整性)不能跨引擎,即便用同一个引擎的表不能引用具备使用不一样引擎的表的外键。
2四、全文本搜索 引擎MyISAM支持全文本搜索,而InnoDB不支持。 (1)启动全文搜索支持,使用FULLTEXT:
CREATE TABLE `productnotes` ( `note_id` int(11) NOT NULL AUTO_INCREMENT, `prod_id` int(11) DEFAULT NULL, `note_date` datetime DEFAULT NULL, `note_text` text, PRIMARY KEY (`note_id`), FULLTEXT KEY `note_text` (`note_text`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
(2)能够在建立表时指定全文搜索(FULLTEXT),也能够在建好后稍后指定数据。不要在导入数据时使用FULLTEXT,由于更新索引须要花时间。 (3)全文搜索不区分大小写。 (4)使用方式:
SELECT note_text, MATCH (note_text) AGAINST ('rabbit') AS rank FROM productnotes;
(5)查询扩展:利用查询扩展能够找出可能相关的结果,即便它们并不精确包括所查找的词,用法:
SELECT note_text, MATCH (note_text) AGAINST ('rabbit' WITH QUERY EXPANSION) AS rank FROM productnotes;
(6)布尔文本搜索方式(更加细致的查找控制):
SELECT note_text, MATCH (note_text) AGAINST ('rabbit' IN BOOLEAN MODE) AS rank FROM productnotes;
2五、插入语句: (1)能够在INSERT INTO之间添加关键字LOW_PRIORITY,指示MySQL下降INSERT语句的优先级,以提升总体性能,以下:
INSERT LOW_PRORITY INTO
(2)INSERT SELECT 语句用法(插入检索出的数据):
INSERT INTO productnotes(prod_id) SELECT product.code FROM product;
2六、更新语句: (1)在UPDATE语句中使用SELECT子查询:
UPDATE productnotes p, (SELECT product.num, product.id FROM product ) temp SET p.note_text=temp.num WHERE temp.id = p.prod_id;
UPDATE IGNORE product SET ……
2七、删除语句DELECT:
2八、ALTER TABLE的一种常见用途是定义外键,如:
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_products FOREIGN KEY( order_num ) REFERENCES orders(order_num);
2九、视图的规则和限制 (1)与表同样,视图必须惟一命名(且不能与表名相同)。 (2)对于能够建立的视图数目没有限制。 (3)为了建立视图,必须具体足够的访问权限。 (4)视图能够嵌套,便可以利用从其它视图中检索数据的查询来构造一个视图。 (5)ORDER BY能够在视图中,但若是从该视图检索数据的SELECT语句中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。 (6)视图不能索引,也不能有关联的触发器或者默认值。 (7)视图能够和表一块儿使用。
30、存储过程
3一、不像大多的DBMS,MySQL游标只能用于存储过程(和函数)。
3二、一个使用触发器后的实际例子:在插入数据后,返回刚插入数据的id。 触发器的写法例子:
CREATE TRIGGER neworder_tri ALTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num; 3三、MySQL是默认自动提交全部更改的,若是须要修改则使用:SET autocommit = 0;
3四、校对在对用ORDER BY子句检索出来的数据排序时起重要的做用。若是你须要用与建立表时不一样的校对顺序排序特定的SELECT语句,能够在SELECT语句自身中进行:
SELECT * FROM customers ORDER BY lastname, firstname COLLATE latin1_general_cs;
解释:latin1_general_cs是一种检验,其中COLLATE是使用校验的关键字。
3五、COLLATE除了使用在SELECT里面,还能够用于GROUP BY、HAVING、汇集函数、别名等。
3六、建立用户帐户: CREAT USER ben IDENTIFIED BY ‘password’; 解释:IDENTIFIED BY ‘password’表示给用户一个口令。
3七、官网资料:https://dev.mysql.com/doc/