一.navicat(可视化界面)
1. 安装可视化界面
2. 字符编码:gen ---ci
二.视图(mysql) 永久保存的结构(sql语句)不保存数据
1.本质上是一张虚拟的表,他的数据来自select语句,
有什么用:原表安全
案例; 载一个公司中 有一张表保存所有人的信息,
这个表不是所有人能看的 老板 财务 可以
某一个员工 只能看到自己的信息5
所以不能把整个表的信息开放给这个员工
功能:
(1).隐藏部分数据,可以开放指定的数据
(2).因为视图可以将查询结果进行保存 来达到减少代码的书写
例如: select * from emp where dept_id= (select id from dept where name = "时长部")
create view taxt_view as select * from emp where dept_id= (select id from dept where name = "市场部")
2. 视图的相关语句:
(1). 创建视图语句:
create view teast_view as select * from t1; 和原表一样
create view teast_view as select * from t1 where name = "张全蛋";
(2)插入
insert into teast_view values(.....)
特点:
1. 每次对视图进行的查询 其实都是再次执行了as 语句后面的查询的语句
2. 可以对视图进行修改 修改会同步到原表
3. 视图是永久存储的 存储的不是数据 而是就是一条 as sql 语句
基本不用:因为你的程序 开放的是数据 不是开放sql语句 而开放的是查询结果
三.sql注入问题: 看 py 文件
四.事物
1. 生活中的事物可以理解为一件事情 : 一件事情要完成 通常不可能一步到位 需要拆分多个小步骤
例如: 请你帮我买水
(1). 给钱
(2). 你去买水
(3). ........
2. 在mysql中事物是一组语句集合
事物特性:
(1):原子性:是事物一个整体 不可分割
(2): 隔离型:事物间要相互隔离 为了维护数据的完整性
例子:你有一张银行卡 第一次查看了余额 发现哟1000 去买东西 回来付钱 发现余额不足 原来你在第一次查询后 你的媳妇把钱转走了
上面是不可重复读
如何避免: 我在查的时候不能修改 查询和修改不能同时进行
因为并发访问 导致的一些问题
(1).脏读: 一个事物 读到了另一个事物未提交的数据 查询之前要保证所有的更新都已经完成
(2).幻读: 一个查询事物没有结束 数据被另一个事物执行了 insert delete
(3).不可重复读: 一个事物在查询 另一个事物在 update
四种隔离级别:
(1):提交未读:
(2):读已提交:
(3):可重复读: 默认
(4):可串行化:
(3): 一致性 : 当事物执行后 所有的数据都是完整的(外键控制,非空约束)
(4): 持久性:一旦数据提交 数据就永久保存
强调(面试题): 事物就是 一堆sql语句的集合 他们是原子性地 要么全部执行 要么全部不执行
客户端 默认开启自动提交:一条sql语句就是一个单独的事物
pymySQL:默认是不自动提交: 需要手动commit 意思是自动就开启了事物
需要掌握的:
start transaction 开启一个事物
commit 提交一个事物
rollback 回滚一个事物
五.存储过程: 可以了理解为mysql的编程
1. 为什么有了Python 还弄出来这种编程语言?
他的作用:可以将你的程序业务逻辑 放到,没有mysql中来处理
可以降低网络的访问次数 提高程序的效率
既然 能不能将所有的数据储存相关的业务逻辑 全部放在MySQL中
技术层面上:能
但是对于公司来说而言 需要在请一个MySQL的开发者
对于个人而言提高沟通成本
三种开发模型:
对于同样的一个业务 你可以放在Python 也可以放在MySQL 有什么区别?
1. 用应用程序 处理逻辑
需要手动编写 sql语法
优点: 执行效率高
缺点: 开发效率低
2. 用应用程序
MySQL 处理逻辑
特点: 应用程序开发者不需要手动编写 sql语法,MySQL开发者来编写
优点:开发效率高
缺点:执行效率略低 沟通成本增高
3. 使用OPM(object relation map ) 对象关系映射
自动帮你生成对应的sql语句 比如你要注册用户 本来要写insert 语句 现在使用肉orm 调用save(用户对象的信息)
优点: 开发效率高
缺点: 执行效率降低
存储过程相当于 Python 中的一个函数
简单地说 学习学习存储过程就是在学习 MySQL编写一个函数
语法:
create procedure 过程的名称({in,out,inout} 参数名称 数据类型 )
begin
具体的sql代码:
end
参数前面需要制定参数的作用
in 表示该参数用于传入数据
out 用于返回数据
inout 即可传入 也可返回
参数类型:MySQL中的数据类型
案例:
创建一个存储过程 作用是将两个整数相加
create procedure add_p(in a int,in b int )
begin
具体的sql代码:
select(显示在总终端) a+b;
end
//
调用: call add_p(20,10)//
注意: 在存储的过程中 需要使用分号来结束一行 但是分号有特殊含义: 结束符
更换: delilimer // : 修该结束符
delilimer ;
MySQL 中的if语句:
if 条件表达式 then
代码
elesif 条件 then
代码
else then
代码
end if;
使用存储过程 完成输入一个数字 1或2 显示 壹 或 贰
create procedure show_p(in a int )
begin
具体的sql代码:
if a = 1 then
select "壹"
elseif a= 2 then
select "贰"
else
select "other"
end if;
end //
其他的流程控制:
switch
case
while 循环
repeat 循环 do while
总结: 实际上是一个MySQL中的一个类似函数的定西 可以用它来实现一些逻辑处理
特点: 里面可以包含流程控制语句和普通sql语句
使用存储过程的优势:
提高应该程序的
create procedure add_p(in a int,in b int )
begin
具体的sql代码:
select(显示在总终端) a+b;
end
//
调用: call add_p(20,10)//
如何在ppymysql中调用存储过程