MySQL 函数与约束

MySQL 函数与约束

文章目录

  • [MySQL 函数与约束](#MySQL 函数与约束)
    • [1 函数](#1 函数)
      • [1.1 字符串函数](#1.1 字符串函数)
      • [1.2 数值函数](#1.2 数值函数)
      • [1.3 日期函数](#1.3 日期函数)
      • [1.4 流程函数](#1.4 流程函数)
    • [2 约束](#2 约束)
      • [2.1 概述](#2.1 概述)
      • [2.2 约束演示](#2.2 约束演示)
      • [2.3 外键约束](#2.3 外键约束)
      • [2.4 删除/更新行为](#2.4 删除/更新行为)

1 函数

函数是指一段可以直接被另一程序调用的程序或代码。

1.1 字符串函数

MySQL中内置了很多字符串函数,常用的几个如下 :

sql 复制代码
-- 左填充
select lpad('01',5,'-');	-- 得到---01
-- 右填充
select rapd('01',5.'-');	-- 得到01---

1.2 数值函数

常见的数值函数如下:

案例: 通过数据库的函数,生成一个六位数的随机验证码。

思路: 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,所以可以在其基础上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0

sql 复制代码
select lpad(round(rand()*1000000 , 0), 6, '0');

1.3 日期函数

常见的日期函数如下:

sql 复制代码
-- 增加指定的时间间隔
select date_add(now(), INTERVAL 70 YEAR );

1.4 流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。

sql 复制代码
select if(false, 'Ok', 'Error');
select ifnull('Ok','Default');
select ifnull('','Default');
select ifnull(null,'Default');
-- 需求: 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 , 其他 ----> 二线城市)
select
name,
( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else
'二线城市' end ) as '工作地址'
from emp;
sql 复制代码
create table score(
	id int comment 'ID',
	name varchar(20) comment '姓名',
	math int comment '数学',
	english int comment '英语',
	chinese int comment '语文'
) comment '学员成绩表';
insert into score(id, name, math, english, chinese) VALUES (1, 'Tom', 67, 88, 95), (2, 'Rose' , 23, 66, 90),(3, 'Jack', 56, 98, 76);

select
id,
name,
(case when math >= 85 then '优秀' when math >=60 then '及格' else '不及格' end ) '数学',
(case when english >= 85 then '优秀' when english >=60 then '及格' else '不及格' end ) '英语',
(case when chinese >= 85 then '优秀' when chinese >=60 then '及格' else '不及格' end ) '语文'
from score;

2 约束

2.1 概述

  • 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据

  • 目的:保证数据库中数据的正确、有效性和完整性。

  • 分类:

    注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

2.2 约束演示

案例:根据需求 完成表结构的创建

sql 复制代码
create table user(
	id int PRIMARY KEY AUTO_INCREMENT comment 'ID唯一标识',
	name varchar(10) NOT NULL UNIQUE comment '姓名',
	age int CHECK(age > 0 && age <= 120) comment '年龄',
	status char(1) default '1' comment '状态',
	gender char(1) comment '性别'
);

2.3 外键约束

  • 概念

    外键用来让两张表的数据之间建议连接,从而保证数据的一致性和完整性。

左侧的emp表是员工表,里面存储员工的基本信息,包含员工的ID、姓名、年龄、职位、薪资、入职日期、上级主管ID、部门ID,在员工的信息中存储的是部门的ID dept_id,而这个部门的ID是关联的部门表dept的主键id,那emp表的dept_id就是外键,关联的是另一张表的主键。

注意:目前上述两张表,只是在逻辑上存在这样一层关系;在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的

  • 添加外键语法

    CREATE TABLE 表名(

    字段名 数据类型,

    ...

    [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)

    );

sql 复制代码
-- 为emp表的dept_id字段添加外键约束,关联dept表的主键id
alter table emp add CONSTRAINT waijian FOREIGN KEY(dept_id) REFERENCES dept(id);
  • 删除外键

    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

    sql 复制代码
    -- 删除emp表的外键waijian
    alter table emp drop foreign key waijian;

2.4 删除/更新行为

添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行为有以下几种:

  • 语法:

    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

sql 复制代码
alter table emp add constraint waijian foreign key (dept_id) references
dept(id) on update cascade on delete cascade ;

alter table emp add constraint waijian foreign key (dept_id) references
dept(id) on update set null on delete set null ;
相关推荐
奶糖趣多多12 分钟前
Redis知识点
数据库·redis·缓存
CoderIsArt1 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧3 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis4 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林5 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享6 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil276 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk7 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境7 小时前
第02章 MySQL环境搭建
数据库·mysql