目录
1、函数
1.1、字符串函数
# 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);
eg:用于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0,比如:1号员工的工号应该为00001.
update emp set workno = lpad(workno, 5, '0');
1.2、数值函数
# ceil
select ceil(1.1);
# floor
select floor(1.9);
# mod
select mod(2,4);
select mod(6,4);
# rand
select rand();
# round
select round(2.345, 2);
select round(2.344, 2);
eg:# 通过数据库的数据,生成一个六位数的随机验证码
select lpad(round(rand() * 1000000,0), 6, '0');
1.3、日期函数
# curdate
select curdate();
# curtime
select curtime();
# now
select now();
# year(date)
select year(curtime());
# month(date)
select month(curtime());
# day(date)
select day(curtime());
# data_add(date, interval expr type)
select date_add(curtime(), interval 70 year);
select date_add(curtime(), interval 70 month);
select date_add(curtime(), interval 70 day);
# datediff(date1, date2)
select datediff('2020-12-01','2020-11-01');
eg:查询所有员工的入职天数,并根据入职天数倒叙排序
select name ,datediff(curdate(), entrydate) as entryday from emp order by entryday desc;
1.4 、流程函数
# if
select if(true, 'ok', 'error');
select if(false, 'ok', 'error');
# ifnull
select ifnull('ok', 'default');
select ifnull('', 'default');
select ifnull(null, 'default');
# case when then else end
# 查询emp表的员工姓名和工作地址(北京/上海--->一线城市,其他 ----> 二线城市)
select
name,
(case workadderss when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;
select
name,
(case when math >= 85 then '优秀' when math >= 60 then '及格' else '不及格' end) as '数学',
(case when english >= 85 then '优秀' when english >= 60 then '及格' else '不及格' end) as'英语',
(case when chinese >= 85 then '优秀' when chinese >= 60 then '及格' else '不及格' end) as '语文'
from score;
2、约束
-
概念:约束是
作用于表字段上的规则
,用于限制存储在表中的数据。 -
目的:保证数据库中数据的正确、有效性和完整性。
-
分类:
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。
举例:
create table user(
id int primary key auto_increment comment '主键',
name varchar(10) not null unique comment '姓名',
age int check ( age > 0 and age <= 120 ) comment '年龄',
status char(1) default '1' comment '状态',
gender char(1) comment '性别'
)comment '用户表';
insert into user(name, age, status, gender) values ('Tom', 19, '1', '男'), ('Jack', 25, '0', '男');
insert into user(name, age, status, gender) values ('Anson',19, '1', '男');
select * from user;
-- insert into user(name, age, status, gender) values (null, 19, '1', '男'); # name不为空
-- insert into user(name, age, status, gender) values ('Anson',19, '1', '男'); # 已经存在
insert into user(name, age, status, gender) values ('Tom4', 80, '1', '男');
-- insert into user(name, age, status, gender) values ('Tom5', -1, '1', '男'); # check检查
insert into user(name, age, status, gender) values ('Tom4', 121, '1', '男'); #check检查
insert into user(name, age, gender) values ('Tom5', 80, '男'); # default语句
2.1、外键约束
外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
---添加外键
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);
---举例
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);
---删除外键
alter table 表名 drop foreign key 外键名称;
---举例
alter table emp drop foreign key fk_emp_dept_id;
2.2、删除/更新行为
alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名(主表字段名) on update cascade on delete cascade;
---举例(级联更新)
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;
3、事务
一组操作的集合,是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
默认MySQL的事务时自动提交的,也就是说,当执行一条 DML语句马,MySQL会立即隐式的提交事务。
举例
此时执行完语句,数据没有发生变化。需要执行commit语句
执行错误,执行回滚事务。(rollback)
3.1、事务的四大特性
3.2、并发事务问题
3.2、事务的隔离级别