函数
函数是指一段可以直接被另一段程序调用的程序或代码。
字符串函数
-- 字符串函数相关演示
-- concat
select concat('hello','mysql');
-- lower
select lower('Hello');
-- upper
select upper('Hello');
-- lpad
select lpad('01',5,'-');
-- rpad
select rpad('01',5,'-');
-- trim 只去除头部和尾部的空格
select trim(' Hello MySQL ');
-- substring
select substring('Hello MySQL',1,5);
-- 给员工工号统一为五位数,不足的在前面补0
update emp set workno = lpad(workno,5,'0');
数值函数
-- 数值函数
-- ceil 向上取整
select ceil(1.5);
-- floor 向上取整
select floor(1.9);
-- mod 取余
select mod(7,4);
-- rand 返回0-1内的随机数
select rand();
-- round(x,y) x四舍五入,保留y位小数
select round(2.345,2);
-- 通过数据库的函数,生成一个六位数的随机验证码 (太妙啦!)
select lpad(round(rand()*1000000,0),6,'0');
日期函数
-- 日期函数
-- curdate()
select curdate();
-- curtime()
select curtime();
-- now()
select now();
-- year,month,day
select year(now());
select month(now());
select day(now());
-- date_add
select date_add(now(),INTERVAL 70 YEAR );
-- datediff 第一个减第二个
select datediff('2021-12-01','2021-10-01');
-- 查询所有员工的入职天数,并根据入职天数倒序排序
select name,datediff(curdate(),entrydate) as 'entrydays' from emp order by entrydays desc;
流程函数
-- 流程函数
-- if
select if(true,'ok','error');
-- ifnull
select ifnull('ok','Default');
select ifnull('','defalut');
select ifnull(null,'default');
-- case when then else end
-- 查询emp表的员工姓名和工作地址(北京、上海--一线 其他--二线)
select
name,
(case workaddress when '北京' then '一线城市' when '上海' then '一线城市'else '二线城市' end) as '工作地址'
from emp;
约束
约束:作用于表中字段上的规则,用于限制存储在表中的数据
目的:保证数据库中的数据的正确、有效和完整性
约束作用在表中字段,可以在创建/修改表的时候添加约束。
create table usser(
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 '用户表';
-- 插入数据
insert into usser(name, age, status, gender) values('Tom1',19,'1','男'),('Tom2',25,'0','男');
insert into usser(name, age, status, gender) values('Tom3',19,'1','男');
insert into usser(name, age, status, gender) values(null,19,'1','男');
insert into usser(name, age, status, gender) values('Tom3',19,'1','男');
insert into usser(name, age, status, gender) values('Tom4',80,'1','男');
insert into usser(name, age, status, gender) values('Tom5',-1,'1','男');
insert into usser(name, age, status, gender) values('Tom5',121,'1','男');
insert into usser(name, age, gender) values('Tom5',120,'男');
外键约束
外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
添加外键
CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREGIN KEY(外键字段名) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
-- 准备数据
create table dept(
id int auto_increment comment 'ID' primary key ,
name varchar(50) not null comment '部门名称'
) comment '部门表';
insert into dept(id,name) values (1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');
create table emp(
id int auto_increment comment 'ID' primary key ,
name varchar(50) not null comment '姓名',
age int comment '年龄',
job varchar(20) comment '职位',
salary int comment '薪资',
entrydate date comment '入职时间',
managerid int comment '直属领导ID',
dept_id int comment '部门ID'
)comment '员工表';
insert into emp(id, name, age, job, salary, entrydate, managerid, dept_id)
values (1,'金庸',66,'总裁',20000,'2000-01-01',null,5),
(2,'张无忌',20,'项目经理',12500,'2005-12-05',1,1),
(3,'杨逍',33,'开发',8400,'2000-11-03',2,1),
(4,'韦一笑',48,'开发',11000,'2002-02-05',2,1),
(5,'常遇春',43,'开发',10500,'2004-09-07',3,1),
(6,'小昭',19,'程序员鼓励师',6600,'2004-10-12',2,1);
-- 添加外键
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;
-- 外键的删除和更新行为
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade ;
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update set null on delete set null ;