MySQL笔记(二)函数 约束

函数

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

字符串函数

-- 字符串函数相关演示
-- 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 ;

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值