目录
书写SQL注意事项
---1,给数据库命名的时候尽量用全小写
---2,作为筛选条件的字符串是否区分大小写看设置的校对规则
select ----- where name ="jack"
create database hrs default charset utf8 collate utf8_bin_ci(加ci对大小写不敏感);
drop table if exists tb_emp ---如果表存在删除
---3,数据库中的对象通常会用前缀加以区分
---table/view/index/function/procedure/trigger
create table tb_dept
{
dro int not null comment'编号',
dname varchar(10) not null comment'名称'
dloc varchar(10) not null comment'所在地'
primary key(dro)
};
insert into tb_tept values ---批量插入
(10,‘会计部’,‘北京’),
(20,‘研发部’,‘成都’);
create table tb-emp
{
--------
}
alter table tb_emp add column hiredate timestamp
alter table tb_emp add constraint fk_emp_mgr foreign key ---
-----查询薪资最高的员工姓名
-----查主管的姓名和编号
用exists取代集合运算和去重操作
执行计划和索引
explain 生成执行计划
select eno,ename from tb_emp where eno=7800; -----快-----type(const -主键)
select eno,ename from tb_emp where ename='张三丰'; --慢-type(ALL-全表查)
select eno,ename from tb_emp where eno<>7900; 使用负向条件(不等于)性能相对差
用名字搜索员工,效率低下---解决方法
----给数据建立目录---查询更快捷index-----索引可以加速查询-----经常用于查询筛选条件的列上,但是额外占用空间会让增删改操作变慢,不能滥用。
create index idx_tb_emp on tb_emp (ename);
drop index idx_tb_emp on tb_emp;
视图
数据库对象----视图----查询的快照-----简化查询----通过视图可以把用户的访问权限限制到某些指定列上
create view vw_dept_count as
select eno,ename,dname from tb_emp t1 inner join tb_dept t2 on t1.dno=t2.dno;
select * from vw_emp_dept;
select ename,dname from vw_emp_dept;
drop view vw_emp_dept; ----删除视图
存储过程和触发器
use hrs 调用数据库
selemiter $$ 定界符
create procedure sp_dept_avg_sal(dno ,int, out, avgsal float)
begin
select avg(sal) into avgsal from tb_emp where dno=dno;
end$$
selemiter ;结束符改回来分号
call sp_dept_avg_sal(20,@a); 调用存储过程
select @a from dual;
drop procedure sp_dept_avg_sal
---修改表添加一个自参照的外键约束
alter table tb_emp drop foreign key fk_emp_dno;
--restrict----不允许操作
--cascade ----级联操作
---set null --设置为null
尽量不使用触发器
授予权限和召回权限
--DCL;授予权限grant to 和召回权限revoke from
create user 'hellokitty' @ '%' identified by'123123';
drop user 'hellokitty' @ '%'
grant all privileges on hrs.* to 'hellokitty'@'%' ----把操作hrs数据库所有的对象表,视图,,所有权限授予给helloKitty
事务--transaction
----把多个增删改的操作做成不可分割的原子性操作
----要么全部都做,要么全都不做
-----比如说银行取钱,一个账户减去,一个账户增加
begin ;
delete from tb_emp;
delete ---------
commit; 全部生效了,提交
rollback;全部失败了,回滚