《MySQL必知必会》学习笔记
最近工作的原因,差不多一个月没有写学习笔记了,趁午休的时间赶紧总结下,要不然到时又忘了写。。。。。。。
MySQL必知必会 知识点
-
不能部分使用DISTINCT,应用于所有的列而不仅是前置它的列,是对搜索出的整条记录进行查重。
-
LIMIT检索出的第一行是行0,LIMIT 3,4的含义是从行3开始取4行。
-
LIKE操作符使用的通配符中,%表示任何字符出现任意次数,_表示单个字符。注意不要过度使用通配符,优先选择其他可代替的操作符,并且,在搜索模式的开始处的通配符(放在最前面)速度最慢。
-
正则表达式例如where 字段名 REGEXP ‘.000’中“.”表示匹配任意一个字符,1000和2000都匹配。
-
正则表达式匹配不区分大小写,若需区分大小写,可使用BINARY关键字,eg.where name REGEXP BINARY ‘Gzx .000’。
-
正则表达式OR匹配用“|”操作符表示,搜索几个串之一。
-
正则表达式匹配一组单一的特定字符,用“[ ]”将这组字符括起来,如[123]=[1|2|3]表示匹配1或2或3。[^123]表示匹配除123外的任何东西。
-
正则表达式匹配一个范围,如[0-9]表示匹配任意数字字符和[a-z]表示匹配任意字母字符。
-
正则表达式匹配特殊字符,必须用\为前导进行转义,\-表示查找-,\.表示查找.。
-
正则表达式匹配多个实例,重复元字符:“*”0到多个,“+”1到多个,“?”0或1个,{n}指定数目的匹配,{n, }不少于指定数目的匹配,{n,m}匹配数目的范围。
-
LIKE操作符和REGEXP正则表达式的区别:LIKE匹配整个串,而REGEXP匹配子串。将正则表达式的开头加上^,结尾加上$,作用跟LIKE一样。
-
拼接字段使用Concat( )函数,把多个串连接成一个串,各个串之间用逗号隔开。
-
去掉字段中数据两侧的空格,使用RTrim( )和LTrim( )去掉右边和左边的空格。去空格和字段拼接可以一起使用,Concat(RTrim(n1),’(‘,RTrim(n2),’)’),去空格后进行字段拼接。
-
测试计算:SELECT语句可以试验函数和计算,如SELECT 3*2返回6,SELECT Trim(‘abc’)返回abc,SELECT Now( )返回当前日期和时间。
-
文本处理函数:Upper( )将文本转换为大写,Lower( )转换为小写,Left(string,length )返回string串左边length个的字符,Locate( )找出串的一个子串,Soundex( )返回串的SOUNDEX值。
-
Sounded( )函数比较串的发音而不是字母,发音类似的串可以被检索到,如WHERE Soundex(name)=Soundex(‘Y Lie’),查出来的名字是Y Lee。
-
数据类型为datetime的数据,仅提取日期部分需要使用Date( )函数,只要想要的是日期,无论相应的列是否包含时间都应该养成使用Date( )的习惯。
-
检索出某一个月份的数据,可以使用BETWEEN ‘2016-01-01’ AND ‘2016-01-31’,也可以使用Year(date)=2016 AND Month(date)=1,其中Year( )是从日期中返回年份的函数,Month( )返回月份。
-
COUNT( )函数如果指定列名,则值为空的行被忽略,但COUNT(*)不忽略NULL值。
-
所有聚集函数都可用来执行多个列上的计算,如SUM(price*qty)。
-
聚集不同值,将DISTINCT参数和聚集函数一起使用,如AVG(DISTINCT price),注意:DISTINCT必须使用列名,不能用于计算或表达式,由此,DISTINCT只能用于COUNT( ),不能用于COUNT(*)。
-
GROUP BY子句列出的每个列都必须是检索列或有效的表达式,但不能是聚集函数,若在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,不能使用别名。除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。
-
WHERE过滤行,HAVING过滤分组,操作符是一样的。也就是说,WHERE在分组前进行过滤,HAVING在分组后进行过滤,WHERE排除的行不包含在分组中。
-
UNION中的每个查询必须包含相同的列、表达式或聚集函数(各列不需要以相同的次序列出)。
-
UNION自动去掉重复的行,若想返回所有匹配行,可使用UNION ALL。UNION的作用和WHERE类似,但WHERE不能返回匹配的重复行,UNION ALL可以。
-
UPDATE语句:UPDATE 表名 SET 字段=‘sth’ WHERE xxx,在更新多个列时,每个“列=值”之间用逗号隔开。删除某一列的值可以UPDATE成NULL。
-
DELETE语句:DELETE FROM 表名 WHERE xxx,DELETE删除整行而不是删除列,删除列用UPDATE设置为NULL值。DELETE从表中删除行,但不删除表本身。想要删除表中所有的行,可以用TRUNCATE TABLE语句(实际上是删除原来的表并重新创建一个表,而不是逐行删除表中数据)。
-
NULL值是没有值,’’是空串,空串是一个有效的值,而不是无值。
-
存储过程中临时更改命令行实用程序的语句分隔符,DELIMITER// 表示使用//作为新的语句结束分隔符,除\符号外,任何字符都可用作语句分隔符。
-
存储过程实际上是一种函数,存储过程名后面必须有(),有参数的话就写在括号里,没有参数也要保留括号,如CALL product( )。删除存储过程不用加括号,如DROP PROCEDURE product( )。存储过程仅当存在时才能删除,否则会报错,可以用DROP PROCEDURE IF EXISTS避免此类错误。
-
新建存储过程需要在名字后的括号中定义参数,其中IN是传递给存储过程,OUT是从存储过程传出,INOUT是对存储过程传入和传出。
暂时总结到这
希望自己可以继续坚持下去,加油,Chad!
所有的努力都值得期许,每一份梦想都应该灌溉!