mysql学习笔记,语言+函数+多表查询+事务+隔离等级

关系型数据库:通过相互关联的二维表来关联数据

DDL

DML:增删改

增:

insert into 表名 value(值1,2,3)(1,2,3)

sql语句的日期和字符串值在单引号里

插入的值的顺序是一一对应的

改:

update 表名 set 字段名1=值1,字段名2=值2 where 条件
update employee set name=lyp,gender=1 where id=1;

where条件如果没有,会修改整张表的数据

删:

delete from 表名 where 条件
delete from employee  where gender='女';

where条件如果没有,会删除整张表的数据

delete不能删除某个字段数据,可以用update将该字段设置为null

DQL
select
	distinct //删除重复
  	字段名 //*代表全部
from 表名
where 条件
group by 字段名1,字段名2//分组
	having //分组后条件
order by 字段名 排序方式//排序方式中ASC是升序(默认),desc降序
limit 起始索引 查询记录数 //分页参数

select 聚合函数 字段名 from 表名
select count(*) from employee group by gender; 

条件语句:in(……)在括号里的值之一

like 模糊匹配 _代表单个字符 %代表任意个字符

is null 是空

分页的起始索引=(页码数-1)×每页记录数

where是先筛选,having是分组后筛选

DQL的执行顺序:from where group by having select order by limit

DCL
函数

字符串函数

update biao set ziduan3=concat(ziduan1,ziduan2);
lower(ziduan)
upper(ziduan)
trim(ziduan)
update biao set ziduan=lpad(ziduan,5,'0')//
rpad(ziduan,5,'0')//右填充0至长度为5
substring(ziduan,0,5)

数值函数

ceil()向上取整
floor()向下取整
round(x,y)四舍五入取y位小数
mod(x,y)取余
rand()返回0-1之间的随机数

日期函数

select curdate();
select curtime();
select year(now());
month();
day();
select datefiff('2020-09-09',now()) //计算两个日期之间相差的天数
update biao set ziduan=date_add(now(),INTERVAL 44 DAY);

流程函数

select if(value,zhi1,zhi2);//value位true返回zhi1
ifnull(v1,v2);//不为空返回v1
select 
	name
	(case work_city when '北京' then 'bigcity' else 'small' end)
	from biao

select 
	name
	(case  when fenshu>90 then 'good' else 'bad' end)
	from biao
约束

非空 唯一 主键 check 外键 默认

creat biao(
	age int check(age>0)
)comment'biao'
alter biao 
	add constraint waijian_name 
	foreign key(waijian_ziduan)//这个是子表(biao)中的要加约束的字段
	references zhubiao_name(ziduan_name)//父表(zhubiao)中赋予biao中约束的字段

alter biao
	drop foreign key waijian_name;

添加外键约束后,再更改父表(zhubiao)中的约束的字段,会提示不能更改(默认情况)

关于删除/更新父表中的约束字段时:

restrict/no action 不允许

set null 子表相关变成null

set default 子表相关变成一个默认值

cascade 子表中的值跟随主表变化

alter biao 
	add constraint waijian_name 
	foreign key(waijian_ziduan
	references zhubiao_name(ziduan_name)
  on update cascade
  on delete cascade
多表查询
select * from fu,zi where fu.zi_id=zi.id
select * from fu,zi where fu.zi_id=zi.id //隐式内连接
select * from fu inner join zi on fu.zi_id=zi.id ;//显式内连接
select * from fu f,zi z where f.zi_id=z.id;//别名

设置别名后只能使用别名!

外连接:left/right join

select biao biao_name1 join biao biao_name2 on 条件

自连接必须为表起别名

联合查询:union/union all 会将两次查询结果合并,union会去重,union all不会

如果两次查询的字段数不一致,会报错

子查询:

嵌套在外部sql语句(insert select update delete)里面的select查询语句

//标量子查询
select * from 学生信息表 
  	where id=(select student_id from 获奖名单表 where '名次'=1);
//列子查询
select * from 学生信息表 
  	where id in (select student_id from 获奖名单表 where '获奖'=true);
//行子查询
select * from 学生信息表 
  	where (class,teacher)=(select class,teacher from 获奖名单表 where '名次'=1);
//表子查询
select * 
  	from (select* from 获奖名单表 where '获奖'=true)
  	where 'teacher'='wang';
事务
start transaction//开始事务
commit//提交事务
rollback//回滚事务

事务的四大特性ACID:

原子性

一致性 事务完成时 所有数据状态一致

隔离性 事务不受外部并发

持久性 对数据库更改

事务并发会有的问题:
脏读:读到别的事务处理一半的数据

不可重复读:事务两次读到的数据不一样(被别的事务更改了
幻读:查询的时候没有,插入的时候多了这条数据

隔离级别:

select @@transaction_isolation;
set session/global transaction isolation level read uncommited

read uncommited(数据未提交)

read commited(数据已提交)

repeatable read(可重复读)

serializable(可串行化)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值