Mysql学习笔记3

一、日期函数

函数功能
curdate()返回当前日期
curtime()返回当前时间
now()返回当前日期和时间
year(date)指定date的年份
month(date)指定date的月份
day(date)指定date的日期
date_add(date,interval exper type)返回一个日期/日期加上一个时间间隔exper后的时间值
datediff(date1,date2)(前面的日期较大)返回起始时间date1和结束时间date2之间的天数

运用方式:select + 函数;

应用实例:

-- 1、返回当前时间和日期
select now();
-- 2、返回特定时间的月份
select month(now());
-- 3、返回70天之后的日期
select date_add(now(),interval 70 day);
--   返回80月之后的日期
select date_add(now(),interval 80 month);
--   返回20年之后的日期
select date_add(now(),interval 20 year);
-- 4、返回两个指定时间之间相差的天数
select datediff('2023-9-1','2023-7-15');
-- 5、查询所有员工的入职天数,并根据入职天数倒序排序
select name,datediff(curdate(),entrydate) as 'entrydays' from user order by entrydays desc;

二、流程函数

.

函数功能
if(value,t,f)如果value为true,则返回t,否则返回f
ifnull(value1,value2)如果value不为空,返回为value1,否则返回valude2
case when[val1] then [res1] …else[default] end如果val1为true,返回res1,…否则返回default默认值
case[expr] when [val1] then [res1] …else[default] end如果expr的值等于val1.,返回res1,…否则返回defalut默认值

应用实例:

题目要求

  • 案例:统计班级各个学员的成绩,展示规则如下:(表中有姓名,英语,数学,语 文成绩,分别统计各个学员个成绩的等级)
    .>=85,展示优秀
    .>=60,展示及格
    . 否则,展示不合格
select
    id,
    name,
    (case when math>=85 then '优秀' when math>=60 then '及格' else '不及格' end) '数学',
    (case when english>=85 then '优秀' when score.english>=60 then '及格' else '不及格' end) '英语',
    (case when chinese>=85 then '优秀' when chinese>=60 then '及格' else '不及格' end) '语文'
from score;

三、 约束

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

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

  • 分类:

约束描述关键字
非空约束限制该字段的数据不能为nullnot null
唯一约束保证该字段的所有数据都是唯一,不重复的unique
主键约束主键是一行数据的唯一标识,要求非空且唯一primary key
默认约束保存数据时,如果未指定该字段的值,则采用默认值default
检查约束保证字段值满足某一个条件check
外键约束用来让两张表的数据之间建立连接,保证数据的一致性的完整性forelgn key

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

1、常用约束

约束条件关键字
主键primary key
自动增长auto_increment
不为空(不为null)not null
唯一unique
逻辑条件check
默认值default

应用实例:

创建一个符合规范的表结构(要求以注释形式标注了)
create table user(                                   -- 约束条件(多个存在,之间写不用加,comment后面加标注)
    id int primary key auto_increment comment '主键',-- 主键,并且自动增长
    name varchar(10) not null unique comment '姓名', -- 不为空,并且唯一
    age int check ( age>0&&age<=120 ) comment '年龄',-- 大于0,并且小于等于120(检查约束)
    status char(1) default '1' comment '状态',       -- 如果没有指定该值,默认为1
    gender char(1) comment '性别'                    -- 无约束条件
)comment '用户表';

2、外键约束

  • 概念:外键约束用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

添加外键的基本方法:
1、
create table 表名(
字段名 数据类型,

[constraint][外键名称] foreign key(外键字段名) references 主表(主表列名) )
2、
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);
删除外键的基本方法:
alter table 表名 drop foreign key 外键名称

应用实例:

  • 题目描述 创建一个部门表作主表和员工表作副表(建表要求不展示了),设置外键将部门表中’id’元素和员工表中的‘dept_id’元素联系起来,实现删除主表该元素时,副表中若存在相关联元素,不可直接删除该主表元素。

先创建主表和副表

-- 创建主表
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 values (1,'顾夜寒',32,'总裁',1000000,'2000-01-01',null,5),(2,'叶暖暖',25,'项目经理',20000,'2005-12-05',1,1),
                       (3,'冷柠',28,'开发',12500,'2006-11-03',2,1),(4,'韦一笑',48,'开发',15000,'2002-12-05',2,1),
                       (5,'常明',36,'开发',10500,'2004-09-07',3,1),(6,'小昭',20,'后端程序员',10000,'2015-10-12',2,1);

后进行创建及删除外键操作

-- 添加外键
alter table emp add constraint  fk_emp_dept_id3 foreign key (dept_id) references  dept(id);
-- 删除外键
alter table emp drop foreign key fk_emp_dept_id3;

注:可在软件里面自行验证,添加主表外键后,在主表要进行删除操作时,如果有外键与副表相关联,则该操作会报错。

3、删除/更新行为

行为说明
no action当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与restrict一致)
restrict当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与弄action一致)
cascade当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则也删除/更新外键在子表中的记录(同更新)
set null当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(要求该外键允许为null)
set default父表有变更时,子表将外键设为一个默认值(innodb不支持)

运用方式:
alter table 表名 addconstraint 外键名称 foreign key (外键字段) references 主表名(主表字段名)on urdate 行为要求 delete cascade;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值