一、数据完整性
如何保证数据完整性:数据类型+约束
数据类型:
1.使用数据类型的原则是:够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间
2.常用类型:
整数:int,bit (只有0,1)
小数:decimal
字符串:varchar,char
日期类型:date, time,datetime
枚举类型:enum
注意事项:
Decimal表示浮点数,Decimal(5,2)表示5位数,小数占2位
Char表示固定长度的字符串
Varchar表示可变长度的字符串
约束条件:
主键约束 primary key
唯一性约束:unique
外键约束:foregin key
非空约束:not null
二、数据表的操作:
1.创建表:
Create table 表名(
字段1 字符类型 约束,
字段2 字符类型 约束,
);
Auto_increment 为自动增长
unsigned表示无符号的意思,也就是非负数,只用于整型.
2.删除表:
Drop table 表名
3.修改表:alter table 表名 修改方式
3.1 修改表名:Alter table 原表名 rename to 新表明;
3.2 添加字段:alter table 表名 add 列名 数据类型 约束;
3.3 修改字段(不重命名):alter table 表名 modify 列名 数据类型 约束;
3.4 修改字段(重命名):alter table 表名 change 原列名 新列名 数据类型 约束;
3.5 删除字段:alter table b表名 drop 列名
4.查看表:
4.1 查看表的创建语句:
Show creare table 表名;
4.2 查看当前数据库中所有的表格
Show table;
4.3 查看表结构;
Desc 表名;
三、数据的操作:增删查改:
1.增加:
1.1 全列插入:注意值的顺序和表中的字段的顺序一一对应
Insert into 表名 values(…)
设置了自动增长的字段,可以使用0或者 default 或者 null 来占位,实现自动排序和插入
枚举型的字段,可以填写枚举值数字位置
有默认值的字段,取默认值用 default
2.删除:
Delete from 表名 where 条件
一般不删除数据,如果需要可以使用逻辑删除,本质是修改操作
Update students set idselete = 1 where id=1;
3.修改
Update 表名 set 列1 = 值1,列2 = 值2 where 条件
四、Mysql 查询
1.基本语句: select 字段名 from 表名
在select后面列前使用distinct可以消除重复的行
2.条件查询:
select * from 表名 where 条件:
Where后面支持多种表示方式,也称运算符,包括
比较运算、模糊查询、范围查询、空判断、逻辑运算
2.1 比较运算:>、<、=、!=(不等于)
2.2 模糊查询:
select * from 表名 where 字段名 like “%或者”
%表示任意多个字符,表示一个任意字符
2.3 范围查询
In();表示在一个非连续的范围内
Select * from 表名 where 字段名 in(1,2,3)
Between …and …:表示在一个连续的范围内
Select * from 表名 where 字段名 between … and …
2.4 空判断
Is null 就是判断空
2.5 逻辑运算,组合条件
使用 and 、or、not对多个查询条件进行组合
优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符
and比or先运算,如果同时出现并希望先算or,需要结合()使用
3.数据排序
使用order by 字段1 desc,字段2 asc
Desc 代表降序
Asc 代表升序
4.聚合函数
4.1 总数(count函数)
count(*)表示计算总行数,和 count(1) 的结果是相同的,但是count(列名) 不会统计null值记录
4.2 最大值
max(列)表示求此列的最大值
4.3 最小值
min(列)表示求此列的最小值
4.4 求和
sum(列)表示求此列的和
4.5 平均值
avg(列)表示求此列的平均值
5.分组函数(group by)
group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组
group by可用于单个字段分组,也可用于多个字段分组
5.1 分组聚合函数:
使用group by会对数据进行分组,可以使用聚合函数(sum、count、avg、min、max)对分组集合做一些操作。
5.2 分组拼接函数:
可以指定连接顺序,连接符号。group_concat([distinct] 字段 [order By 字段 asc separator'-'])
group_concat(字段名)可以作为一个输出字段来使用,
表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合
5.3 筛选分组
having 条件表达式:用来分组查询后指定一些条件来输出查询结果
having作用和where一样,但having只能用于group by
5.4 with rollup
with rollup的作用是:在最后新增一行,来记录当前列里所有记录的总和
select * from 表名 group by 字段名称 with rollup
6.sql写作和执行顺序
6.1 写作顺序
SELECT 列名
FROM 表名
[WHERE 条件判断]
[GROUP BY 分组条件]
[HAVING 条件判断]
[ORDER BY 排序]
[LIMIT 取数范围]
6.2 执行顺序:
先关联,再查询,再排序
七、字符切分函数
1.substring : 从字符串 s 的 start 位置截取长度为 length 的子字符串
Substring(s,start,length)
2.substring_index :返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串,number如果是正数,则返回左边的的字符串,number如果是负数,则返回右边的
Substring_index(s,delimiter,number)
3.left:返回字符串s的前n个字符
Left(s,n)
4.right:返回字符串s后n个字符,从右边数
Right(s,n)
5.mid:从字符串s的n位置截取长度为len的子字符串,同substring
6.insert:返回字符串str,在pos起始的字串且len个字符上的字串由字符串newstr代替
Insert(str,pos,len,newstr)
八、字符定位、拼接函数:
1.字符定位函数:
1.1 length:返回字符串str的长度
Length(str)
1.2 locate:返回字串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0
Locate(substr,str)
1.3 instr:返回字串substr在字符串str的第一个出现的位置,与locate只是参数位置相反
Instr(str,substr)
2.字符串拼接函数
2.1 concat:返回来自于参数连结的字符串。可以有很多个参数,如果参数有一个是NULL,则结果返回NULL。一个数字参数被变换为等价的字符串形式。
Concat(str1,str2,str3,…)
2.2 concat_ws: 同 CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上 x,x 可以是分隔符
Concat_ws(x,str1,str2,str3,…)
2.3 lpad:在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len。如果s2不够则重复填充多个s2,如果s2过长则优先取左边的字符使得达到len长度。
lpad(s1,len,s2)
九、数学函数:
1.mod(n,m)函数:返回N除以M余数
2. Round(N)函数:返回数字N的四舍五入的一个整数
3. Ceil(N)函数:返回大于或等于数值N的最小整数
4. Floor(N)函数:返回小于或等于数值N的最小整数
5. Rand()函数:返回从0,1之间的随机float值
6. power(N,M)函数:幂运算,N的M次方
7.sqrt(n)函数:进行开平运算
十、时间函数:
1.获取当前时间
1.1 获取年月日时分秒
1.1.1 now()函数:获取当前时间信息
1.1.2 sysdate()函数:
两者区别为:now()在执行开始值得到,sysdate()在函数执行时动态得到值
1.2 Current_date()函数:获取年月日
1.3 current_time()函数:获取时分秒
2.时间格式的转换
2.1 字符串转换为日期格式:
Str_to_date(时间字符串,字符串日期格式)
2.2 日期转换为特殊字符串形式:
Date_format(日期,字符串格式)
3.提取时间信息
3.1 使用year、month等函数直接提取
4.日期的运算
4.1 现有日期进行偏移:
Date_sub(“日期”,interval “要减少偏移的间隔” 偏移方式)
Date_add(“日期”,interval “要增加偏移的间隔” 偏移方式)
4.2 两个日期计算天数差
Datediff(time,time2):返回两个日期之间(time1—time2)的天数
4.3 两个日期计算时间差
Timediff(time1,time2):两个日期相减time1-time2
4.4 两个日期得到指定差(推荐使用):
Timestampdiff(unite,begin,end):返回end-begin的结果,其中begin和end是date或者datetime格式
十一、窗口函数:
1.定义:可以对数据库数据进行实时分析分析处理的函数
2.基本语法:<窗口函数名> over (partition by <分列的组> order by<要排序的列>)
3.常用窗口函数:
3.1 排序窗口函数:
3.1.1 RANK 函数:计算排序时,如果存在相同位次的记录,则会跳过之后的位次,
3.1.2 DENSE_RANK 函数:同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次
3.1.3 ROW_NUMBER 函数:赋予唯一的连续位次
3.2 聚合类窗口函数:包括SUM、AVG、COUNT、MAX、MIN等
注意:如果有order by排序,会是一个累计计算,没有排序是一个分组计算
3.3 偏移类窗口函数
lag(字段名,行数) 取出当前行前面第n行数据
lead (字段名,行数) 取出当前行后面第n行数据
十二、条件控制语句
1. case when 语句:如果哪个判断成立,那返回对应结果,并且不再往下判断了
case when 判断 1 then 结果1
when 判断 2 then 结果2
. …..
else 结果n
end
2. if函数
If(a,b,c),如果a满足条件,返回b,否则返回c