数据类型

整数

有符号signed(默认),无符号unsigned

有符号位 无符号位
tinyint 1字节 -128到127 0到255
smallint 2字节 -32768到32767 0到65535
mediumint 3字节 -8388608到8388607 0到16777215
int 4字节 -2147483648到2147483647 0到4294967295
bigint 8字节

浮点数

m是数字总位数,d是小数点后位数

decial(m,d) 字符串 不会丢失精度(十进制浮点数转为二进制浮点数会丢数据)
float[m,d] 4字节 若不填md,保留7位小数
double[m,d] 8字节 约是float总位数的十倍

字符型

char 1-255 定长
varchar 1-65535 变长
tinytext
text 1-65535 不规定
mediumtext 1-1千6百万 不规定
longtext 1-42亿 不规定
enum(‘value1’,’value2’,….) 最多65525个 枚举
set(‘value1’,’value2’,….) 最多64个值 集合内任意排列组合,1/2/3/4/8个字节,取决于set的个数

日期时间型

time 3字节 时间(24小时制)
date 3字节 日期
year 1字节 年份
datetime 8字节 日期时间
timestamp 4字节 (优先) 时间戳(1970-1-1以后)

函数类型

数字函数

绝对值:abs()
四舍五入:round(数,保留几位)
向上取整:ceil()
向下取整:floor()
整数除法:3 div 4
取余数:5%3 或 5 mod 3
判断奇偶:mod(id, 2) = 1
幂运算:power(数,次方数)
对数:log() / ln()(e为底数)
开方:sqrt()
数字截取:truncate(数字,截断至小数几位)
被影响记录的计数:row_count()

日期时间函数

当前日期时间:now()
当前日期:curdate()
当前时间:curtime()
加时间:date_add / adddate(‘日期’,interval [-]10 minute/hour/day/week/month/year)
减时间:date_sub(‘日期’,interval [-]10 minute/hour/day/week/month/year)
天数计算:datediff(‘小日期’,’大日期’)
格式转换:date_format(‘2014-3-20’,’%m/%d/%y’)
条件:最近7天内

  1. where real_date>=DATE_SUB(CURDATE(),interval 7 day)

字符函数

小写:lower()
大写:upper()

字符连接:concat(“¥”,53,”元”)
字符通过分隔符连接:concat_ws(‘分隔符’,’A’,’B’,…)
数字格式化:format(数字)

获取左侧:left(‘字符’,位数)
获取右侧:right(‘字符’,位数)
字符长度:length(‘….’)
位运算:col & 1 表示长度为一位
字符出现的位置:instr(ename,”a”)
模式匹配:[not] like(‘mysql’,’m%’) %代表任意个字符,_代表任意一个字符

去除前空格:ltrim()
去除后空格:rtrim()
去除前后空格:trim()
去除前字符:trim(leading’?’ from ‘??…??’)
去除后字符:trim(trailing’?’ from ‘??…??’)
去除前后字符:trim(both’?’ from ‘??…??’)

替换:replace(‘我是原值’,’原值’,’替换值’)
插入/替换:insert (“你好”1,0,”先生”) 1表示从第一个位置开始,0表示替换几个字符,结果为”先生你好”
截取:substring(‘你好世界’,3,2) 从3位开始,取2位字符(位置可为负,即倒数取)

左填充:lpad(“hello”,10,”“) # 10表示一共几个字符
右填充:rpad(“hello”,10,”
“)

排名函数

row_number():依次递增排名,无重复排名
rank():相同分数有重复排名,但是重复后下一个人按照实际排名
dense_rank():分数一致排名一致,分数不一致排名+1
NTILE(4):分组排名,里面的数字是几,最多排名就是几,里面的数字是4,最多的排名就是4

条件函数

如果没有第二条数据,则显示NULL

  1. SELECT IFNULL((SELECT Salary FROM Employee LIMIT 1 OFFSET 1),NULL)

单条件:if(条件,真值,假值)
多条件:

  1. if的嵌套函数(男女对换)

    1. update salary set sex = IF(sex = 'm', 'f', 'm')
  2. case函数

    1. case
    2. when 条件1 then 1
    3. when 条件2 then 2
    4. else N
    5. end as col

    比较运算

    区间范围内:对象值 [not] between 0 and 1000
    特定值中:对象值 [not] in(5,10,15,…)
    为空:对象值 is [not] null

    聚合函数

    (不能出现在where子句中)

sum / max / min / avg / count / count(*)包含空值

信息函数

连接ID:connect_id()
当前数据库:database()
显示上条写入记录:last_insert_id()
显示当前服务器版本:SELECT VERSION()
显示当前用户:SELECT USER()

加密函数

信息摘要算法(web页面):md5()
密码算法(mysql登录):password()
改mysql密码:set password=password’…’

对称加密

(加密解密为同一个密钥):用于文件加密

DES加密:弃用
AES加密:使用

hex目的:将二进制乱码转为可读十六进制

加密:hex(AES_ENCRYPT(原始数据,密钥字符串));
解密:AES_DECRYPT(unhex(加密结果),密钥字符串);

非对称加密

(加密解密为两个密钥,公钥+私钥):用于互联网和电信加密

RSA加密
DSA加密
ECC加密

自定义函数

只有一个返回值

创建函数:create function 函数名f1(参数1,参数2,…) returns 返回值数据类型 return 函数体;
删除函数:drop function 函数名;
复合函数:begin…end