关系型数据库:通过相互关联的二维表来关联数据
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(可串行化)