数据类型
整数
有符号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天内
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
SELECT IFNULL((SELECT Salary FROM Employee LIMIT 1 OFFSET 1),NULL)
单条件:if(条件,真值,假值)
多条件:
if的嵌套函数(男女对换)
update salary set sex = IF(sex = 'm', 'f', 'm')
case函数
casewhen 条件1 then 值1when 条件2 then 值2else 值Nend 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(加密结果),密钥字符串);
非对称加密
(加密解密为两个密钥,公钥+私钥):用于互联网和电信加密
自定义函数
只有一个返回值
创建函数:create function 函数名f1(参数1,参数2,…) returns 返回值数据类型 return 函数体;
删除函数:drop function 函数名;
复合函数:begin…end
