存储程序
存储过程:
特点:输入输出参数
1.三种模式: in/out/inout
2.if/while … do … end while/loop…end loop/repeat…end repeat
3.创建:procedure 调用:call
存储函数:
特点:有返回值,作为sql语句一部分运行。
创建:
delimiter //;
create function func_emp(eno int)
returns varchar(20)
deterministic #确定的
begin
declare name varchar(20);
select ename into name from emp where empno = eno;
return name;
end;
#调用
select func_emp(7788);
触发器:
特点:由事件驱动,不能传递参数
创建:
delimiter //;
creater triger tri_stu
#before|after insert|update|delect
after delete
on student for each row #行级触发器
begin #old|new
insert into stu_bak values(old.sid,old.sname,old.cid);
end;
视图和索引
视图
虚拟表:
没有真实的物理存在,在引用过程中动态根据基表生成。
语法:
create view view_emp as select * from emp
where deptno = 10 with check option;
注:
1.通过视图可以修改基表数据
2.一般视图只做查询
删除视图:
drop view view_emp
优点:
1.安全性:保证数据不泄密
2.高效性:多表连接效率较低
3.定制化数据:将常用的字段放置视图
索引
索引定义
1.提升查询效率创建的数据结构
· 默认是B-Tree索引(位图,反向等…)
语法:
1.普通索引:
创建:create index index_name on tname(fie1...);
删除:drop index index_name on emp;
2.唯一索引:
创建:create unique index index_name on tname(fie);
3.主键,唯一约束,外键等都会添加索引
适合场景
1.表数据量足够大
2.增删改较少的表
3.高基数列
注意:
1.索引需要单独维护,索引不宜添加过多。
2.将条件列设置索引。
3.索引失效状况。
数据库的设计
数据库设计基石。
数据库设计的三大范式:
1NF: 所有的域必须是原子性的。列不能分割。
2NF: 所有的字段必须与主键相关,而不是部分相关(联合主键)。
3NF:所有字段必须与主键直接相关,而不是间接相关。
数据库设计步骤:
E-R:entity relationship
实体之间的关系:
一对一:个人信息和档案信息
1.外间添加唯一约束
2.主键做外键
一对多:雇员和部门
多对多:学生和课程
1.创建关系表
2.关系表创建联合主键
sql优化
1.select子句中不要使用*
2.索引失效状况
2.1 索引列进行计算
2.2 索引列使用函数(模糊查询:包含)
2.3 索引列使用not != <> > < null not null
2.4 索引列使用or(使用union替代)
备份和还原:
Mysqldump -uroot -proot dbname >d:/t.sql;
mysql -uroot -p < C:\backup.sql