MYSQL
2021-05-27 09:23:52 83 举报
AI智能生成
MYSQL知识点梳理
作者其他创作
大纲/内容
SQL执行顺序
(8) SELECT (9)DISTINCT<select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE|ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
(11) LIMIT <limit_number>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE|ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
(11) LIMIT <limit_number>
MYSQL函数
字符串函数
大小写转换
LCASE(s)
将字符串 s 的所有字母变成小写字母
UPPER(s)
将字符串转换为大写
UCASE(s)
将字符串转换为大写
LOWER(s)
将字符串 s 的所有字母变成小写字母
空格相关
SPACE(n)
返回 n 个空格
RTRIM(s)
去掉字符串 s 结尾处的空格
LTRIM(s)
去掉字符串 s 开始处的空格
TRIM(s)
去掉字符串 s 开始和结尾处的空格
截取字符串
SUBSTRING(s, start, length)
从字符串 s 的 start 位置截取长度为 length 的子字符串
SUBSTR(s, start, length)
从字符串 s 的 start 位置截取长度为 length 的子字符串
MID(s,n,len)
从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len)
字符串串内操作
ASCII(s)
返回字符串 s 的第一个字符的 ASCII 码
CHAR_LENGTH(s)、CHARACTER_LENGTH(s)
返回字符串 s 的字符数
FIELD(s,s1,s2...)
返回第一个字符串 s 在字符串列表(s1,s2...)中的位置
FIND_IN_SET(s1,s2)
返回在字符串s2中与s1匹配的字符串的位置
LOCATE(s1,s)
从字符串 s 中获取 s1 的开始位置
LEFT(s,n)
返回字符串 s 的前 n 个字符
POSITION(s1 IN s)
从字符串 s 中获取 s1 的开始位置
REVERSE(s)
将字符串s的顺序反过来
RIGHT(s,n)
返回字符串 s 的后 n 个字符
FORMAT(x,n)
函数可以将数字 x 进行格式化 "#,###.##", 将 x 保留到小数点后 n 位,最后一位四舍五入。
SUBSTRING_INDEX(s, delimiter, number)
返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。
如果 number 是正数,返回第 number 个字符左边的字符串。
如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。
如果 number 是正数,返回第 number 个字符左边的字符串。
如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。
字符串之间操作
CONCAT(s1,s2...sn)
字符串 s1,s2 等多个字符串合并为一个字符串
CONCAT_WS(x, s1,s2...sn)
同 CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上 x,x 可以是分隔符
INSERT(s1,x,len,s2)
字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
REPEAT(s,n)
将字符串 s 重复 n 次
REPLACE(s,s1,s2)
将字符串 s2 替代字符串 s 中的字符串 s1
LPAD(s1,len,s2)
在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len
RPAD(s1,len,s2)
在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len
STRCMP(s1,s2)
比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1
数字函数
三角函数
ACOS(x)
求 x 的反余弦值(参数是弧度)
ASIN(x)
求反正弦值(参数是弧度)
ATAN(x)
求反正切值(参数是弧度)
ATAN2(n, m)
求反正切值(参数是弧度)
COS(x)
求余弦值(参数是弧度)
COT(x)
求余切值(参数是弧度)
DEGREES(x)
将弧度转换为角度
PI()
返回圆周率(3.141593)
RADIANS(x)
将角度转换为弧度
SIN(x)
求正弦值(参数是弧度)
TAN(x)
求正切值(参数是弧度)
数字运算
ABS(x)
返回 x 的绝对值
AVG(expression)
返回一个表达式的平均值,expression 是一个字段
CEIL(x)
返回大于或等于 x 的最小整数
CEILING(x)
返回大于或等于 x 的最小整数
COUNT(expression)
返回查询的记录总数,expression 参数是一个字段或者 * 号
n DIV m
整除,n 为被除数,m 为除数
EXP(x)
返回 e 的 x 次方
FLOOR(x)
返回小于或等于 x 的最大整数
GREATEST(expr1, expr2, expr3, ...)
返回列表中的最大值
LEAST(expr1, expr2, expr3, ...)
返回列表中的最小值
LN
返回数字的自然对数,以 e 为底。
LOG(x) 或 LOG(base, x)
返回自然对数(以 e 为底的对数),如果带有 base 参数,则 base 为指定带底数。
LOG10(x)
返回以 10 为底的对数
LOG2(x)
返回以 2 为底的对数
MAX(expression)
返回字段 expression 中的最大值
MIN(expression)
返回字段 expression 中的最小值
MOD(x,y)
返回 x 除以 y 以后的余数
POW(x,y)/POWER(x,y)
返回 x 的 y 次方
RAND()
返回 0 到 1 的随机数
ROUND(x)
返回离 x 最近的整数
SIGN(x)
返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1
SQRT(x)
返回x的平方根
SUM(expression)
返回指定字段的总和
TRUNCATE(x,y)
返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)
日期函数
ADDDATE(d,n)
计算起始日期 d 加上 n 天的日期
ADDTIME(t,n)
n 是一个时间表达式,时间 t 加上时间表达式 n
CURDATE()
回当前日期
CURRENT_DATE()
返回当前日期
CURRENT_TIME
返回当前时间
CURRENT_TIMESTAMP()
返回当前日期和时间
CURTIME()
返回当前时间
DATE()
从日期或日期时间表达式中提取日期值
DATEDIFF(d1,d2)
计算日期 d1->d2 之间相隔的天数
DATE_ADD(d,INTERVAL expr type)
计算起始日期 d 加上一个时间段后的日期
DATE_FORMAT(d,f)
按表达式 f的要求显示日期 d
DATE_SUB(date,INTERVAL expr type)
函数从日期减去指定的时间间隔。
DAY(d)
返回日期值 d 的日期部分
DAYNAME(d)
返回日期 d 是星期几,如 Monday,Tuesday
DAYOFMONTH(d)
计算日期 d 是本月的第几天
DAYOFWEEK(d)
日期 d 今天是星期几,1 星期日,2 星期一,以此类推
DAYOFYEAR(d)
计算日期 d 是本年的第几天
EXTRACT(type FROM d)
从日期 d 中获取指定的值,type 指定返回的值。
type可取值为:
MICROSECOND
SECOND
MINUTE
HOURDAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
type可取值为:
MICROSECOND
SECOND
MINUTE
HOURDAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
FROM_DAYS(n)
计算从 0000 年 1 月 1 日开始 n 天后的日期
HOUR(t)
返回 t 中的小时值
LAST_DAY(d)
返回给给定日期的那一月份的最后一天
LOCALTIME()
返回当前日期和时间
LOCALTIMESTAMP()
返回当前日期和时间
MAKEDATE(year, day-of-year)
基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期
MAKETIME(hour, minute, second)
组合时间,参数分别为小时、分钟、秒
MICROSECOND(date)
返回日期参数所对应的微秒数
MINUTE(t)
返回 t 中的分钟值
MONTHNAME(d)
返回日期当中的月份名称,如 November
MONTH(d)
返回日期d中的月份值,1 到 12
NOW()
返回当前日期和时间
PERIOD_ADD(period, number)
为 年-月 组合日期添加一个时段
PERIOD_DIFF(period1, period2)
返回两个时段之间的月份差值
QUARTER(d)
返回日期d是第几季节,返回 1 到 4
SECOND(t)
返回 t 中的秒钟值
SEC_TO_TIME(s)
将以秒为单位的时间 s 转换为时分秒的格式
STR_TO_DATE(string, format_mask)
将字符串转变为日期
SUBDATE(d,n)
日期 d 减去 n 天后的日期
SUBTIME(t,n)
时间 t 减去 n 秒的时间
SYSDATE()
返回当前日期和时间
TIME(expression)
提取传入表达式的时间部分
TIME_FORMAT(t,f)
按表达式 f 的要求显示时间 t
TIME_TO_SEC(t)
将时间 t 转换为秒
TIMEDIFF(time1, time2)
计算时间差值
TIMESTAMP(expression, interval)
单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和
TO_DAYS(d)
计算日期 d 距离 0000 年 1 月 1 日的天数
WEEK(d)
计算日期 d 是本年的第几个星期,范围是 0 到 53
WEEKDAY(d)
日期 d 是星期几,0 表示星期一,1 表示星期二
WEEKOFYEAR(d)
计算日期 d 是本年的第几个星期,范围是 0 到 53
YEAR(d)
返回年份
YEARWEEK(date, mode)
返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推
高级函数
BIN(x)
返回 x 的二进制编码
BINARY(s)
将字符串 s 转换为二进制字符串
CASE expression
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE result
END
CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。
CAST(x AS type)
转换数据类型
COALESCE(expr1, expr2, ...., expr_n)
返回参数中的第一个非空表达式(从左向右)
CONNECTION_ID()
返回唯一的连接 ID
CONV(x,f1,f2)
返回 f1 进制数变成 f2 进制数
CONVERT(s USING cs)
函数将字符串 s 的字符集变成 cs
CURRENT_USER()
返回当前用户
DATABASE()
返回当前数据库名
IF(expr,v1,v2)
如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。
IFNULL(v1,v2)
如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。
ISNULL(expression)
判断表达式是否为 NULL
LAST_INSERT_ID()
返回最近生成的 AUTO_INCREMENT 值
NULLIF(expr1, expr2)
比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1
SESSION_USER()
返回当前用户
SYSTEM_USER()
返回当前用户
USER()
返回当前用户
VERSION()
返回数据库的版本号
复杂查询
多表查询
联结
等值联结(内联结)
自联结
外联结(leftjoin right join full join)
要考虑的问题
使用基表
结合多个主键
笛卡尔积
根据数据字典写多表联结
联表时使用主键关联
SQL事务
使用原因
保证数据安全有效
操作
提交commit
回滚rollback
四个特点
原子性,一致性,隔离性,持久性
组成
DML,DDL,DCL
重要概念
脏读
不可重复读
幻读
隔离级别
锁
排它锁,共享锁,乐观锁,悲观锁
视图
它是一条SQL查询语句
本身不包含数据
是一张虚拟表
作用
一次编写,多次使用
可授权访问表的特定部分
封装计算字段
SQL概念相关
数据库分类
关系型数据库 ORACLE,DB2,SYBASE,SQL SERVER,MYSQL, MS ACCESS
网状,树状,面向对象数据库
命令类型
DDL
create/alter/drop table,index,create/drop view
DML
insert,update,delete
DCL
创建对象,控制用户权限
DQL
select
数据管理
事务管理
commit,rollback,savepoint,set transaction
表的结构
字段,记录,列,主键,NULL值,数据类型,字段长度
基本数据类型
字符串类型
CHAR
定长字符串
0-255 bytes
VARCHAR
变长字符串
0-65535 bytes
TINYBLOB
不超过 255 个字符的二进制字符串
0-255 bytes
TINYTEXT
短文本字符串
0-255 bytes
BLOB
二进制形式的长文本数据
0-65 535 bytes
TEXT
长文本数据
0-65 535 bytes
MEDIUMBLOB
二进制形式的中等长度文本数据
0-16 777 215 bytes
MEDIUMTEXT
中等长度文本数据
0-16 777 215 bytes
LONGBLOB
二进制形式的极大文本数据
0-4 294 967 295 bytes
LONGTEXT
极大文本数据
0-4 294 967 295 bytes
数值类型
TINYINT
1byte,小整数值
SMALLINT
2bytes,大整数值
MEDIUMINT
3bytes,大整数值
INT或INTEGER
4bytes,大整数值
BIGINT
8bytes,极大整数值
FLOAT
4bytes,单精度浮点数值
DOUBLE
8bytes,双精度浮点数值
DECIMAL
对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2
小数值,银行项目常用,高精度
日期和时间类型
DATE
日期值
YYYY-MM-DD
TIME
时间值或持续时间
HH:MM:SS
YEAR
年分值
YYYY
DATETIME
混合日期和时间值
YYYY-MM-DD HH:MM:SS
TIMESTAMP
混合日期和时间值,时间戳
YYYYMMDD HHMMSS
完整性约束
主键约束
唯一性约束
外键约束
非空约束
检查约束(CHK)
去除约束
SQL查询
select语句
select
from
where
order by
大小写不敏感
别名(表&字段都可以有)
操作符
比较操作符
=,!=,<,>
逻辑操作符
BETWEEN,IN,LIKE,UNIQUE,IS NULL,EXSTS,ALL,ANY
连接操作符
AND(优先高于OR),OR
求反操作符
NOT IN
算术操作符
+-*/及其组合
汇总查询
COUNT,SUM,MAX,MIN,AVG
NULL值默认不考虑,除非使用COUNT(*)
数据排序与分组
GROUP BY
他后面的字段不能用别名
使用汇总(聚合)函数时,才会用它
select后面的字段(除了汇总函数)都要出现在它后面
HAVING
HAVING就是为GROUP BY而生
HAVING是用来过滤分组的
WHERE是对SELECT结果进行限制
CUBE,ROLLUP
存储过程
存储过程和视图很像
比视图执行效率高,功能更强大
其他
SQL性能调整
索引
数据库安全
系统目录
触发器
游标
0 条评论
下一页