MySQL 基础学习笔记

一、关键字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)UNION几乎老是完成与多个WHERE条件相同的工做。 (3)UNION是默认对总结果去重的,若是须要返回全部不去重的结果,可使用UNION ALL。 (4)UNION的使用规则:
  • UNION必须由两条或者两条以上的SELECT语句组成,语句之间用关键字UNION分隔。
  • UNIION中的每一个查询必须包含相同的列、表达式或者聚合函数,不过各个列不须要以相同的次序出列出。
  • 列数据必须兼容:类型没必要彻底相同,但必须是DBMS能够隐含的转换的类型(例如:不一样的数值类型或 不一样的日期类型)。
  • 用UNION组合查询时,只能用一条ORDER BY 对总结果排序(不能单独对某个SELECT语句排序),ORDRE BY必须出如今最后一条SELECT语句以后。

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;
  •  注意点:
  • 在mysql中更新时不能将更新的表做为查询的表。
  • update 时,更新的表不能在set和where中用于子查询;
  • update 时,能够对多个表进行更新(sqlserver不行);          如:update ta a,tb b set a.Bid=b.id ,b.Aid=a.id;  
  • update 后面能够作任意的查询,这个做用等同于from; (2)在用UPDATE语句更新多行,而且更新这些行的一行或者多行时出现一个错误,则整个UPDATE操做被取消(错误发生前更新的全部行被恢复到它们原来的值)。但若是使用了IGNORE关键字,即便发生错误,也能够继续更新,以下使用:
UPDATE IGNORE product SET ……

2七、删除语句DELECT:

  • 删除行,但不删除表自己;
  • 更快的删除:TRUNCATE table:它实际上删除了原来的表,并从新建立一个表,而不是逐条删除,速度更快;

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、存储过程

  • 优势: (1)经过把处理封装在容易使用的单元中,简化复杂的操做。 (2)因为不要求反复创建一系列处理步骤,保证了数据的完整性。 (3)简化对变更的管理。若是表名、列名或者业务逻辑有变化,只须要更改存储过程的代码。使用它的人不须要知道它的变化。 (4)提升性能。由于使用存储过程比使用单独的SQL语句要快。 (5)存在一些只能用在单个请求中的MySQL元素和特性,存储过程可使用它们来编写功能更灵活的代码。
  • 缺点: (1)存储过程的编写比基本SQL语句复杂,编写存储过程须要更高的技能,更丰富的经验。 (2)建立存储过程须要安全访问权限。须要管理员授予权限。

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/

相关文章
相关标签/搜索