【MySQL】函数和约束

如标题所说,本文重点只有两个:MySQL语句里面的函数和约束

1. 函数

因为在前一篇文章里面有讲到聚合函数,所以在这里就不重复介绍了,本文所介绍的函数有4类:字符串函数,数值函数,日期函数和流程函数

1.1 字符串函数

由于字符串函数比较多,所以只介绍常用的

函数说明
concat(s1,s2,s3…)拼接字符串
lower(str)/upper(str)字符串全部转为小写/大写
trim(str)删除字符串头尾的空格
substring(str,start,len)截取字符串,从start位置开始,截取长度为len
lpad(str,n,pad)左填充,用pad对str的左边进行填充使字符串长度达到n,相应的还有右填充,函数名为rpad,参数和用法与lpad一致

上面的这些函数,如果你学过Java的话,那么对这些函数应该不会陌生
这里lpad和rpad可能不好理解,我们来看看示例
在这里插入图片描述
使用+对字符串01进行填充,直至01长度到达5

1.2 数值函数

函数说明
ceil(i)i向上取整
floor(i)i向下取整
rand()返回0~1之间的随机数
mod(x,y)返回x/y的模
round(x,y)对x进行四舍五入,保留y位小数

1.3 日期函数

函数说明
curdate()/curtime()返回当前日期/当前时间
now()返回当前的日期和时间
year(date)获取指定日期的年份,同样的,还有month(date)和day(date)
datediff(date1,date2)计算date1和date2之间的天数,如果date1小于date2,计算的结果为负数
date_add(date,interval expr type)在date后加上一段时间,可以为年,月,日

date_add这个函数还是演示下怎么使用
在这里插入图片描述

1.4 流程函数

流程函数在SQL语句中主要进行条件筛选

函数说明
if(value,t,f)类似if语句,value值为真返回t,否则返回f
ifnull(value1,value2)value1不为空时返回value1,否则返回value2
case when [val] then [res]…else [default] end当val的值为true时返回res,否则返回default,when和then可以有多个
case [expr] when [val] then [res]…else [default] end当expr的值等于val的时候返回res,否则返回default,when和then可以有多个

在这里插入图片描述

2.约束

约束用于字段,是用来限制存储在数据表上的数据,这样做是为了保证数据的有效性,比如age字段你就不能写除数字以外的数据,常见的约束有下面几种:

约束说明
not null非空约束,此字段的数据不能为空
unique唯一约束,此字段的所有数据不能重复
defaule默认约束,此字段中如果有数据没有指定值,那么就采用默认值
primary key主键约束,主键是一行数据的唯一标识,主键要求非空且唯一
foreign key外键约束,用于两张数据表建立连接,保证数据的完整性和一致性

因为约束是作用于字段,所以我们在建表的时候就可以为字段添加约束,在建表之后通过alter修改字段数据类型时加上约束也可以

此外还有一个关键字:auto_increment;这个关键字表示的是自动增长,是MySQL才有的一个关键字
在创建数据表的时候一般会选择id作为主键,而id又是从1开始往后递增的,所以primary key和auto_increment经常同时使用实现主键自增

我在这里新建一个简单的数据表,然后来看看数据表的结构
首先是没有约束的:
在这里插入图片描述
然后是有约束的:
在这里插入图片描述
然后是外键约束的使用
外键所关联的是另一张数据表的主键,两张表中含有外键的称为子表,关联的另一张为父表
外键同样可以在创建数据表的时候指定,也可以是在创建数据表之后再添加

添加外键:
  creat table 表名(字段1 数据类型,
  [constraint] [外键名称] foreign key (外键字段名) references 主表(主表列名));

  alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名);
删除外键:
  alter table 表名 drop foreign key 外键名称;

2.1 外键的删除更新行为

在对父表进行修改的时候子表的外键的行为,可以指定

行为说明
no action在父表中更新/删除记录时,先检查此记录有没有外键,有则不允许更新/删除
restrict在父表中更新/删除记录时,先检查此记录有没有外键,有则不允许更新/删除
cascade在父表中更新/删除记录时,先检查此记录有没有外键,有则更新/删除外键在子表中的记录
set null在父表中删除记录时,先检查此记录有没有外键,有则将子表中对应的外键设为null(前提是此外键允许为null)
set default父表有变更时,子表外键设为一个默认值(MySQL默认的Innodb引擎不支持)

使用外键的删除更新行为需要使用的关键字为on

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名) on update 行为 on delete 行为;

本篇到此结束,下一篇是多个数据表之间的查询操作,完

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星鸦wyk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值