MySQL总结
###MySQL分类
##SQL分为:DQL,DML,DCL,DDL
##DDL create drop alter create database| table drop database|table alter database|table ##DML insert update delete ##DQL select ##DCL create alter drop ---user show grants - grant revoke---权限
###函数,约束
-
实体之间关系 一对多(多对一) 多对多 一对一
-
数据表关系 一对多(多对一) 2张表的主外键关系 多对多 引入中间表, 一对一 2张表的主外键关系,外链唯一
###多表查询
SQL分类:DDL DML DCL DQL DDL create drop alter --- database table DML insert delete update DCL create drop alter ---- user 用户 grant 授权 DQL select
###多表查询
内连 where , inner join 外连 left/right join 自连接: 自已连接自己,包括:内连与外连
###子查询
-
多表查询 内连接 外连接 自连接:
-
联合查询 union [all]
-
子查询 1)子查询位置:select, from , where
-
查询结果分类: 标量, 列,行,表子查询
-
###事务
事务
-
什么是事务?
-
查询事务提交的方式 show global|session variables like 'autocommit'; select @@autocommit;
-
事务处理 set @@autocommit=0;关闭自动提交 start transcation | begin ; 关闭自动提交 commit; 提交事务 rollback; 事务回滚
-
事务特性: ACID
-
事务并发问题: 脏读、不可重复读、幻读
-
事务隔离级别:3
###索引1
-
数据引擎 show engines; innoDB(默认) MYISAM memory innoDB: 支持事务,支持外键,支持行锁 MYISAM:不支持事务,无外键,支持表锁
-
索引 1)索引特点:提高查询的速度,额外占用存储空间,降低增删改的性能 2)索引存储结构:b+tree b-tree hash 3)索引类型:主键索引,唯一索引,常规索引 4)索引存储形式:聚集索引和非聚集(二级)索引
###索引2
mysql存储过程
-
什么是存储过程 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
说明:mysql从5.0版本之后开始支持存储过程
-
存储过程优缺点 优点:
增强sql的灵活性 增加业务的复用性,存储过程创建成功后可以多次调用 执行速度快 距离需要处理的数据近,减少网络流量 减少应用程序和数据库的交互次数 缺点:
数据库的移植性差 维护性没有java等编程语言好,调试不方便
-
语法结构 3.1 基本语法 delimiter $$ create procedure 过程名称([[IN|OUT|INOUT] 参数名 数据类型,...]) begin -- sql; 语句 end $$ delimiter ; 示例:
delimiter $ #指定分隔符 create procedure pro_hello_word() begin select 'hello word'; end; $ delimiter ; # 还原分隔符
局部变量
delimiter $ create procedure p6() begin declare num int default 1;#声明变量,由于在存储过程中声明,称为局部变量 set num = num + 200; #给变量赋值,方式一:set ,方式二:select..into select num; end $ delimiter ;
call p6();
#系统变量
显示系统变量
show global variables like '%transaction%'; show global variables like 'autocommit'; show session variables like '%transaction%'; select @@global.autocommit; select @@session.autocommit;
设置系统变量
show global variables like '%password%'; set @@autocommit=0;
用户变量,一般以@符号开始,可以作用于多个存储过程
delimiter $ create procedure p7() begin set @u1 = @u1 +1; select @u1; end $ create procedure p8() begin set @u1 = @u1 +1; select @u1; end $ delimiter ;
set @u1=1; call p7(); call p8();
游标
delimiter // create procedure p_c() begin declare done boolean default true; declare id int; declare name varchar(20); declare cls_cur cursor for select sid,sname from t_student; #游标1:声明游标
handler异常处理方式:continue,exit
#declare continue handler for not found set done=false; declare continue handler for 1329 set done=false; open cls_cur; #游标2 打开游标 while done do fetch cls_cur into id,name; #游标3 获取游标 select id,name; end while; end // delimiter ;
call p_c();