首页 > 安全资讯 >

结构化查询语言SQL及MySQL

16-09-18

float(size, scale)类型规定了整个浮点数的位数及小数点后的位数,比如float(4, 2)支持-99 99~99 99,即小数点前的位数只支持size-scale(4-2)个,小数点后的数字位数如果超过了scale个,则会自动四舍五入。

 

数据类型

MySQL中主要由三种数据类型:数字、字符串、日期。

数字

float(size, scale)类型规定了整个浮点数的位数及小数点后的位数,比如float(4, 2)支持-99.99~99.99,即小数点前的位数只支持size-scale(4-2)个,小数点后的数字位数如果超过了scale个,则会自动四舍五入。

double(size, scale)类型中size、scale的含义同float类型。

字符串

tinytext类型存储最长为255的字符串。
text存储最长为65535的字符串。
mediumtext存储最长为16777215的字符串。
longtext存储最长为4294967295的字符串。
blob存储最大为65535字节的二进制数据。
mediumblob存储最大为16777215字节的二进制数据。
longblob存储最大为4294967295字节的二进制数据。
enum(a1, a2, ...)存储(a1, a2, ...)中的值,最多可以存放65535个值,比如:
这里写图片描述
set(a1, a2, ...)存储(a1, a2, ...)中的值,set中最多可以存放64个值,但是set可以存放用逗号分隔的多个值,比如:
这里写图片描述

视图

MySQL中,视图是一种虚拟表(不能与实际数据表重名),可以定义视图后绑定到某个用户上,实现访问控制。视图并没有存储数据,而是对真实数据的引用,只有操作视图的时候才会执行视图中的SQL操作数据。

创建视图

这里写图片描述

为视图的属性命名:
这里写图片描述

通过视图操作数据

视图创建以后,就如同真实的表一样,可以操作数据(插入、更新、删除等):
这里写图片描述

考虑到数据安全,可以在创建视图是增加with check option选项,这样如果对视图操作后的数据在视图中不再可见,则不允许该操作。比如正常的视图如果操作一条数据后在视图中不再可见是不做检查的:
这里写图片描述

如果加了with check option选项,则不允许上面的更新操作:
这里写图片描述

删除视图

drop view 命令删除视图。

时间

now()函数获取当前日期及时间,返回YYYY-MM-DD hh:mm:ss格式的数据。
curdate()函数获取当前日期,返回YYYY-MM-DD格式的数据。
curtime()函数获取当前时间,返回hh:mm:ss格式的数据。
date(str)函数返回日期或时间字符串str中的日期部分,比如:
这里写图片描述

extract(EXP from str)函数从日期、时间字符串中返回单独的部分,比如年、月、小时、小时至分钟等,EXP可用字段如下:

EXP 含义
microsecond 微秒
second
minute 分钟
hour 小时
day
week
month
quarter 季度
year
second_microsecond 秒到微秒
minute_microsecond 分钟到微秒
hour_microsecond 小时到微秒
day_microsecond 天到微秒
minute_second 分钟到秒
hour_second 小时到秒
day_second 天到秒
hour_minute 小时到分钟
day_minute 天到分钟
day_hour 天到小时
year_month 年到月

date_add(str, interval str2 type)命令用来给字符串str表示的日期增加一段时间,str2是表示增量的字符串,type的取值见上表,比如:
这里写图片描述

date_sub(str, interval str2 type)函数语法格式与date_add()函数语法格式一样,从str代表的时间中减去一段时间,比如:
这里写图片描述

datediff(str1, str2)函数返回str1和str2代表的日期的差值,比如:
这里写图片描述

date_format(str, format)返回str代表的时间字符串格式化为format指定的格式后的结果,其中format格式化参数如下:

格式 描述
%a 星期的缩写,如Wed
%b 缩写月名
%c 月,数值
%D 带有英文后缀的月中的天数
%d 月的第几天,数值(00-31)
%e 月的第几天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间, 24-小时 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位

常用函数

MySQL中有很多用于数学计算的函数,应用语法为select function() from ,这些函数主要分为两类:

聚合性函数

对某一列生效,返回一个单独的值。

avg

返回某一列的平均值,值为NULL的行不参与分子和分母的运算。
这里写图片描述

count

count()计算某一列的行数(值为NULL的不参与计算),count(distinct )计算某一列的行数(去重,值为NULL的不参与计算),count(*)计算表格的行数:

mysql> select * from a;
+------+-------+-----------+-----------+
| id   | price | unitStock | unitOrder |
+------+-------+-----------+-----------+
|    1 | 12.34 |         2 |         4 |
|    2 |  1.23 |      NULL |         4 |
|    3 |  5.12 |         1 |         3 |
+------+-------+-----------+-----------+
3 rows in set (0.00 sec)

mysql> select count(unitStock) from a;
+------------------+
| count(unitStock) |
+------------------+
|                2 |
+------------------+
1 row in set (0.01 sec)

mysql> select count(distinct unitOrder) from a;
+---------------------------+
| count(distinct unitOrder) |
+---------------------------+
|                         2 |
+---------------------------+
1 row in set (0.02 sec)

mysql> select count(*) from a;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.01 sec)

min

min()用来从某一列获取最小值(NULL不参与运算)。可以用于文本型书序按字典序排序。

max

max()用来从某一列获取最大值(NULL不参与运算)。可以用于文本型书序按字典序排序。
这里写图片描述

sum

sum()用来返回某一列的总和。

group by

聚合函数通常需要配合group by语句进行分组,比如查询每个id中最大的price(结果按照id分组):
这里写图片描述
也就是要查询的列既包含原始列,又包含聚合函数作用的列时,需要使用group by语句。也可以基于多个原始列进行分组:
这里写图片描述

having

进行复杂聚合和分组时,如果对原始列进行条件查找,可以在group by语句之前使用where语句,但是对聚合函数进行条件查找,比如在group by语句之后使用having语句,语法格式为select , 聚合函数() from where 运算符 值 group by having 聚合函数() 运算符 值。

标量函数

对某一单独输入生效,返回一个单独的值

ifnull

NULL参与数学运算的结果是NULL,有时希望在某一列的值是NULL的时候,将其当做另一个值参与运算,比如:
这里写图片描述

ucase

ucase()用来将某一列的值转换为大写后返回。

lcase

lcase()用来将某一列的值转换为小写后返回,比如:
这里写图片描述

mid

mid(, start, length)用来从某一列的字符值中,从start位置开始(下标从1开始),长度为length的字符串,如果未指定length,则返回到字符串结尾的所有字符,比如:
这里写图片描述

length

length()用来返回某一列字符的长度。

now

now()函数返回当前的时间。比如:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2016-09-17 22:45:39 |
+---------------------+
1 row in set (0.02 sec)

round

round(, decimals)用来返回某一列浮点型数值保留小数点后decimal位的结果:
这里写图片描述

format

format(value, decimal)函数用来返回更美观的浮点数输出,比如:
这里写图片描述

如果觉得我的文章对您有帮助,欢迎关注我或者为这篇文章点赞,谢谢!

相关文章
最新文章
热点推荐