目录
一、函数
1、函数的概念
函数:是一段可以直接被另一端程序调用的程序或代码
#在进行下面的学习之前呢,给大家推荐一个软件------->DataGrip 这款软件用来满足我们日常的SQL编写,十分方便!他对于多表之间的关系也有一个图形化的展示。安装方法呢,大家百度一下就得到了,小编在这里就不详细说明了!!!
2、函数的分类
2.1 字符串函数
字符串函数包括有:concat(s1,s2,s3...)、lower(str)、upper(str)、lpad(str,n,pad)、rpad(str,n,pad)、trim(str)、substring(str,start,len)
1. concat(s1,s2,s3)---->字符串拼接,将s1,s2,s3拼接成一个字符串。
2. lower(str)---->将字符串内容全部转为小写。
3. upper(str)---->将字符串内容全部转为大写。
4. lpad(str, n, pad)---->左填充,用pad对字符串str的左面进行填充,达到 n 个字符串长度。
5. rpad(str, n, pad)---->右填充,用pad对字符串str的右面进行填充,达到 n 个字符串长度。
6. trim(str)----->去掉字符串头部和尾部的空格。
7.substring(str, start, len)--->截取字符串str从start(从1开始)位置起len个长度的字符串。
2.2 数值函数
1. ceil(x)----->向上取整。
2. floor(x)----->向下取整。
3. mod(x, y)---->x 与 y 的模,即 x 除以 y 取其余数。
4. rand()-----> 随机数,随机生成一个 0-1 的随机数。
5. round(x, y)----> 求 x 四舍五入的值,保留 y 为小数。
select ceil(1.2);
-------------------------> 2
select floor(1.8);
--------------------->1
select mod(3,1);
-----------------------> 0
select mod(4,3);
-----------------------> 1
select round(1.2345,2);
------------------------->1.23
2.3 日期函数
1. curdate()--------->当前日期。
2. curtime()--------->当前时间。
3. now()---------->当前日期和时间。
4. year(date)------> 返回输入日期date的年份。
5. month(date)------->返回输入日期date的月份。
6. day(date)-------->返回输入日期date的天数。
7. date_add(date, interval 推迟数 时间单位)------>得到的是输入日期date 推迟 输入单位个 之后的日期。(时间单位:day , month,year)
8. datediff(date1 , date2)-------->得到两个日期相隔多少天。(date1 - date2)
2.4 流程函数
1. if(value, t , f)------>若value为true,则返回 t ,否则返回 f。
2. ifnull(value1, value2)------->若value1 不为空,则返回value1,否则返回value2.
3. case when [val1] then [res1] ... else [default] end;
--------> 若 value1 为 true 返回 res1,...... 否则返回default 默认值
4. case [exp1] when [val1] then [res1] ... else [default] end;
-------->若exp1的值 = val1 ,返回res1,...... 否则返回default 默认值。
select if (true, 't', 'f');
----------------------------> t
select if('true','ok','no');
-------------------------------> no
select ifnull(null, 'nul');
-------------------------------->nul
select ifnull('null', 'nul');
-------------------------------->null
3. case when [val1] then [res1] ... else [default] end;
可以用于城市的划分(一线二线城市)
---工作地址在北京,上海的显示一线城市,其他显示二线城市
select name,
(case when workadiss = '北京' then '一线城市' when workadiss = '上海' then '一线城市' else '二线城市' end) as '工作地址'
from empeo;
4. case [exp1] when [val1] then [res1] ... else [default] end;
可以用于年龄等级的划分,以及薪资水平等级的划分
select name,
(case when age >= 45 then '老年人' when age >= 25 then '中年人' when age >= 18 then '成年人' else '未成年人' end) as '年龄'
from empeo;
二、约束
1、约束的概念
约束:约束时作用于表中字段上的规则,用于限制存储在表中的数据;它的目的是:保证数据库中数据的正确性、有效性、完整性和一致性。
约束是作用于表中字段上的,可在建表/改表的时候添加约束。
2、约束的分类
2.1 非空约束
关键词:not null
-- 例如 在创建 姓名 字段时
create table user(
name varchar(10) not null comment'姓名'
)
2.2 唯一约束
关键词: unique
-- 例如 在创建 id 字段时
create table emp(
id int primary key auto_increment unique comment'主键ID'
);
--------auto_increment------>自动增加
2.3 主键约束
关键词: primary key
上示例中已展示
2.4 默认约束
关键词:default ' 默认值 '
在保存数据时,若未指定该字段的值,则采用默认值。
-- 例如 在创建 状态 字段时
create table emp(
status char(1) default '1' comment '状态'
);
2.5 检查约束
关键词: check
检查保存的数据是否满足字段的某一条件。(MySQL版本:8.0.16 之后才有此功能)
2.6 外键约束
外键约束:用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
#添加外键
-- 在创建表时建立外键
create table emp(
字段 数据类型 ...... constrain [外键名称] foreign key (外键字段) references 主表(列名)
);
-- 在表结构已经建立完成添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表(列名);
#删除外键
alter table 表名 drop foreign key 外键名称;
在建立外键之后,当我们删除父表数据时,有时候会报错导致删除/更新失败,那这是什么原因导致的????下面就让我们一起来了解一下外键约束中的删除/更新行为!
#外键约束中的删除/更新行为
1. no action / restrict-----> 当父表中 删除/更新 对应记录时,首先检查记录是否有对应外键,如果有 则不允许 删除/更新---------(MySQL中的外键约束默认行为)
2. cascode------> 当父表中 删除/更新 对应记录时,首先检查记录是否有对应外键,如果有 则也删除/更新 外键在子表中的记录
3. set null------> 当父表中 删除/更新 对应记录时,首先检查记录是否有对应外键,如果有,则设置子表中该外键值为 null (要求:外键允许取 null )
4. set default ------> 父表有变更时,子表将外键设置成一个默认值(innodb 不支持(innodb是存储引擎,后续将会介绍))
-- 更改约束行为
alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表(列名)
on update 新行为名称 on delete 新行为名称;
三、总结
经过以上的学习,相信大家对MySQL中的函数与约束有了一定的了解,如果想要继续深入了解,关注小编,后续会一只更新下去的,让我们一起成长!!!
也希望这一系列的文章能够对您有所帮助,谢谢大家!!!