modify
primary key
auto_increment
date
constraint
unique
foreign key
references
cascade
distinct
lower
upper
substring
order by
net start\stop mysql5
net start\stop mysql8
加主键(表级约束)
alter table student add constraint pk_stu primary key(sno);
设置主键自增(表级约束)
alter table student modify sno int(6) auto_increment
外键策略
– 1.NO Action:
delete from t_class cno=2
update t_student set classno = null where class =2– 2.cascade级联
– 加外键alter table t_student add constraint fk_stu_classno foreign key(classno) references t_class(cno)
– 删外键alter table t_student drop FOREIGN KEY fk_stu_classno– 级联
alter table t_student add constraint fk_stu_classno foreign key(classno) references t_class(cno) on update cascade on delete cascade– 3.set null
alter table t_student add constraint fk_stu_classno foreign key(classno) references t_class(cno) on update set null on delete set null
– 去重 distinct
select job from emp
select distinct job,deptno from emp
– 排序 order by
select * from emp order by empno – asc 升序排列 可以省略 默认升序
select * from emp order by sal desc – desc 降序排列 de-asc
select * from emp order by sal desc ,hiredate – 日期的大小是数值,不是早晚
– 使用函数
select empno, ename,lower(ename),upper(ename),sal from empselect max(sal),min(sal),count(sal),sum(sal),avg(sal) from emp
– 字符串函数
select ename,length(ename),substring(ename,2,3) from emp – 索引从1开始
– 日期与时间函数
select curdate(),curtime()
select now(),sysdate() ,sleep(3),now(),sysdate() from dual
insert into student values (null,‘zhangsan’,‘男’,23,now(),‘Java001’,‘zh@sxt.cn’)
insert into student values (null,‘zhangsan’,‘男’,23,sysdate(),‘Java001’,‘zh2@sxt.cn’)
– 流程函数
select empno,ename,sal,if(sal>=2500,‘high’,‘low’) as grade from emp order by grade – if–else
select empno,ename,sal,comm,sal+ifnull(comm,0) from emp – if
– case 等值判断 switch
select empno,ename,job,
case job
when ‘CLERK’ then ‘店员’
when ‘SALESMAN’ then ‘销售’
when ‘MANAGER’ then ‘经理’
else ‘其他’
end ‘岗位’,
sal from emp
– case 区间判断 if-else if - else if—else
select empno,ename,sal ,
case
when sal<=1000 then ‘A’
when sal <=2000 then ‘B’
when sal <=3000 then ‘C’
else ‘D’
end 等级
from emp
– 字段、多行函数不能共存,除非使用分组,除非这个字段出现子分组语句中
select deptno,avg(sal),count(1)
from emp
group by deptno
having avg(sal)>2000
order by max(sal)
– 相当于全外链接
select *
from emp e
left join dept d
on e.deptno = d.deptno
union – 并集 去重 (union all 效率高 union 效率低)
select *
from emp e
right join dept d
on e.deptno = d.deptno
– 查询本部门最高工资的员工
select * from emp e where e.deptno = 10 and sal = (select max(sal) from emp where deptno = 10)
union
select * from emp e where e.deptno = 20 and sal =(select max(sal) from emp where deptno = 20)
union
select * from emp e where e.deptno = 30 and sal =(select max(sal) from emp where deptno = 30)
相关子查询
select * from emp e where sal =(select max(sal) from emp where deptno = e.deptno)
– 查询每个部门平均薪水(相关子查询)
select dsa.* ,sg.grade
from (
select deptno,avg(sal) asl
from emp
group by deptno ) dsa
join salgrade sg
on ( dsa.asl between sg.losal and sg.hisal)– 相关还是不相关 不相关
– 子查询不是只能出现在where子句中,也可以出现在其他位置
索引
– 没有给sal、hiredate创建索引,效率低下
select * from emp order by sal ,hiredate
– 创建索引
create index index_emp_sal_hiredate on emp (sal ,hiredate desc)
– 使用索引,效率提升
select * from emp order by sal ,hiredate
– 事务开始,成功不会自动提交,失败也不会自动回滚
start transactionupdate account set balance= balance-1000 where id =1update account set balance = balance1 +1000 where id=2– 手动提交
commit
– 手动回滚
rollback;