目录
1函数
1.1字符串函数
1.2数值函数
1.3日期函数
1.4流程函数
2约束
2.1约束概述和演示
2.2外键约束(表连接键)
1函数
函数是指一段可以直接被另一段程序调用的程序或代码。
1.1字符串函数
MySQL中内置了很多字符串函数,常用的几个如下:
语法:select 函数(参数);
练习:
#concat连接字符
select concat('hell','o');
#lower 将字符串全部转为小写
select lower('HEllo');
upper 将字符串全部转为大写
select upper('HEllo');
#lpad左填充到5个字符
select lpad('he',5,'-');
#rpad右填充
select rpad('he',5,'-');
#trim 去掉头尾的空格,中间不管
select trim(' he llo ');
#substring(str,start,len) 返回从字符串str从start位置起的len个长度的字符串
select substring('helloworld',1,5)
案例:由于业务需求变更,企业员工的工号,统一5位数,目前不足5位数的全部在前面补0。比如:1号员工的工号应该为00001.
update emp set workno=lpad(workno,5,'0');
select * from emp
1.2数值函数
常见的数值函数如下:
语法:select 函数(参数);
案例:通过数据库的函数,生成一个六位数的随机验证码。
我的代码:不严谨
select round(rand()*1000000,0);
正确代码:还要补0
select lpad(round(rand()*1000000,0),6,'0');
1.3日期函数
常见的日期函数如下:
练习:
#当前日期
select curdate();
#当前时间
select curtime();
#当前日期和时间
select now();
#获取指定date的年份
select year(now());
#返回一个日期/时间值加上一个时间间隔expr后的时间值,这里是加上70年后
select now() ,date_add(now(),interval 70 year);
#时间差:返回起始时间date1和结束时间date2之间的天数
select datediff('2024-6-23','2024-6-14');
案例:查询所有员工的入职天数,并根据入职天数倒序排序。
分析:入职天数=当前日期-入职日期,时间差用datediff函数,当前日期用curdate函数。
代码:
select name, datediff(curdate(),endate) entrydate
from emp
order by entrydate desc;
1.4流程函数
流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。
案例:查询emp表的员工姓名和工作地址(北京/上海---->一线城市,其他---->二线城市)
代码1:case when
select name,workaddress,
case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end address
from emp;
代码2:case when 这种写法可以用于不等式
select name,workaddress,
case when workaddress='北京' then '一线城市' when workaddress='上海' then '一线城市' else '二线城市' end address
from emp;
代码3:if
select name,workaddress,
if(workaddress in ('北京','上海'),'一线城市','二线城市') address
from emp;
结果都是一样的:
2约束
2.1约束概述和演示
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性。
分类:
案例:根据需求,完成表结构的创建。需求如下:
对应创建SQL代码:
create table user(
id int primary key auto_increment comment '主键',
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 '性别'
)comment '用户表'
如果插入的数据中,age超过范围,check就会报错:
因为name varchar(10) not null unique comment '姓名',如果name为null也会报错。
如果是通过图形化界面添加表,可以直接进行勾选:
2.2外键约束(表连接键)
外键:用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
如下图:左侧的emp表是员工表,里面存储员工的基本信息,包含员工的ID、姓名、年龄、职位、薪资、入职日期、上级主管ID、部门ID,在员工的信息中存储的是部门的ID dept_id,而这个部门的ID是关联的部门表dept的主键id,那emp表的dept_id就是外键,关联的是另一张表的主键。
添加外键:
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);
现在就不能直接删除某个表中的记录了。这就保证了数据的一致性和完整性。
删除外键:
alter table emp drop foreign key fk_emp_dept_id;
删除:表或表键用drop,数据字段用delete。